颜色检测python项目

 注意:本文引用自专业人工智能社区Venus AI

更多AI知识请参考原站 ([www.aideeplearning.cn])

什么是颜色检测?

颜色检测是检测任何颜色名称的过程。很简单不是吗?嗯,对于人类来说,这是一项极其简单的任务,但对于计算机来说,这并不简单。人眼和大脑协同工作,将光转化为颜色。我们眼睛中的光感受器将信号传输到大脑。然后我们的大脑就会识别颜色。从孩提时代起,我们就用颜色名称来映射某些光。我们将使用大致相同的策略来检测颜色名称。项目的动态效果展示如下,请点击观看:

关于 此Python 项目

在此颜色检测 Python 项目中,我们将构建一个应用程序,通过该应用程序,您可以通过单击颜色自动获取颜色名称。为此,我们将有一个包含颜色名称及其值的数据文件。然后我们将计算每种颜色的距离并找到最短的。

数据集

颜色由3种原色组成;红色、绿色和蓝色。在计算机中,我们将每个颜色值定义在0到255的范围内。那么我们可以用多少种方式来定义颜色呢?答案是 256*256*256 = 16,581,375。大约有 1650 万种不同的颜色表示方法。在我们的数据集中,我们需要将每种颜色的值与其相应的名称进行映射。但不用担心,我们不需要映射所有值。我们将使用包含 RGB 值及其相应名称的数据集。我们数据集的 CSV 文件取自此链接:

颜色数据集

color.csv 文件包含 865 种颜色名称及其 RGB 和十六进制值。

先决条件

在开始使用这个带有源代码的Python项目之前,您应该熟悉Python的计算机视觉库,即OpenCV和Pandas。

OpenCV、Pandas 和 numpy 是该项目在 Python 中所需的 Python 包。要安装它们,只需在终端中运行以下 pip 命令:

pip install opencv-python numpy pandas

在Python中构建项目的步骤——颜色检测

1. 用pandas读取CSV文件

当我们需要对 CSV 等数据文件执行各种操作时,pandas 库非常有用。pd.read_csv()读取 CSV 文件并将其加载到 pandas DataFrame 中。我们为每一列分配了一个名称,以便于访问。

#Reading csv file with pandas and giving names to each column
index=["color","color_name","hex","R","G","B"]
csv = pd.read_csv('colors.csv', names=index, header=None)

2.在窗口上设置鼠标回调事件

首先,我们创建了一个窗口,其中将显示输入图像。然后,我们设置一个回调函数,当鼠标事件发生时将调用该函数。

cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_function)

通过这些行,我们将窗口命名为“image”,并设置一个回调函数,每当鼠标事件发生时,该函数都会调用draw_function() 。

3.创建draw_function

它将计算我们双击的像素的 RGB 值。函数参数有事件名称、鼠标位置的 (x,y) 坐标等。在函数中,我们检查事件是否双击,然后计算并设置 r、g、b 值以及 x,鼠标的 y 位置。

def draw_function(event, x,y,flags,param):if event == cv2.EVENT_LBUTTONDBLCLK:global b,g,r,xpos,ypos, clickedclicked = Truexpos = xypos = yb,g,r = img[y,x]b = int(b)g = int(g)r = int(r)

4. 计算距离得到颜色名称

我们有 r、g 和 b 值。现在,我们需要另一个函数来返回 RGB 值的颜色名称。为了获得颜色名称,我们计算距离(d),它告诉我们与颜色的接近程度,并选择距离最小的颜色。

我们的距离是通过以下公式计算的:

d = abs(Red – ithRedColor) + (Green – ithGreenColor) + (Blue – ithBlueColor)

def getColorName(R,G,B):minimum = 10000for i in range(len(csv)):d = abs(R- int(csv.loc[i,"R"])) + abs(G- int(csv.loc[i,"G"]))+ abs(B- int(csv.loc[i,"B"]))if(d<=minimum):minimum = dcname = csv.loc[i,"color_name"]return cname

5. 在窗口上显示图像

每当发生双击事件时,都会更新窗口上的颜色名称和 RGB 值。

使用cv2.imshow()函数,我们在窗口上绘制图像。当用户双击窗口时,我们绘制一个矩形并获取颜色名称,以使用cv2.rectanglecv2.putText()函数在窗口上绘制文本。

6. 运行Python文件

运行 Python 文件即可。

python <strong>Color_detection.py</strong>

结果展示如下:

图片[2]-颜色检测python项目-VenusAI

下载并解压zip文件

其中包含全部的项目文件,项目文件夹包含3个文件:

  • Color_detection.py – 我们项目的主要源代码。
  • Colorpic.jpg – 用于实验的示例图像。
  • Colors.csv – 包含我们的数据集的文件。

完整代码请参考源网站:https://www.aideeplearning.cn/1691-2/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/274275.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

荔枝派zero驱动开发06:GPIO操作(platform框架)

参考&#xff1a; 正点原子Linux第五十四章 platform设备驱动实验 一张图掌握 Linux platform 平台设备驱动框架 上一篇&#xff1a;荔枝派zero驱动开发05&#xff1a;GPIO操作&#xff08;使用GPIO子系统&#xff09; 下一篇&#xff1a;更新中… 概述 platform是一种分层思…

static的用法和作用

从三个方面来讲述static的用法和作用&#xff0c;分别是静态局部变量和静态函数以及静态成员 1. 在一个函数中定义静态局部变量的时候&#xff0c;该静态局部变量的生命周期将贯穿整个程序的运行期&#xff0c;而不会像局部变量一样函数运行结束的时候就被销毁。 #include &…

华为北向网管NCE开发教程(1)闭坑选接口协议

华为北向网管NCE开发教程&#xff08;1&#xff09;闭坑选接口协议 华为北向网管NCE开发教程&#xff08;2&#xff09;REST接口开发 华为北向网管NCE开发教程&#xff08;3&#xff09;CORBA协议开发 华为北向网管NCE开发教程&#xff08;4&#xff09;&#xff08;源代码接口…

网络地址转换协议NAT

网络地址转换协议NAT NAT的定义 NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址&#xff08;即仅在本专用网内使用的专用地址&#xff09;&#xff0c;但现在又想和因…

如何打造定制化企业内训系统?企培源码开发实战教学

在当今竞争激烈的商业环境中&#xff0c;企业内训系统的建立和定制化已成为提高企业竞争力和员工素质的关键。本文将探讨如何打造定制化企业内训系统&#xff0c;并介绍企培源码开发的实战教学。 第一步&#xff1a;需求分析与规划 建立定制化的企业内训系统之前&#xff0c…

echarts绘制雷达图

<template><div><div>【云端报警风险】</div><div ref"target" class"w-full h-full" stylewidth&#xff1a;200px;height:300px></div></div> </template><script setup> import { ref, onMounte…

【漏洞复现】Salia PLCC cPH2 远程命令执行漏洞(CVE-2023-46359)

0x01 漏洞概述 Salia PLCC cPH2 v1.87.0 及更早版本中存在一个操作系统命令注入漏洞&#xff0c;该漏洞可能允许未经身份验证的远程攻击者通过传递给连接检查功能的特制参数在系统上执行任意命令。 0x02 测绘语句 fofa&#xff1a;"Salia PLCC" 0x03 漏洞复现 ​…

为什么GPU对于人工智能如此重要?

GPU在人工智能中相当于稀土金属&#xff0c;甚至黄金&#xff0c;它们在当今生成式人工智能时代中的作用不可或缺。那么&#xff0c;为什么GPU在人工智能发展中如此重要呢&#xff1f; GPU概述 什么是GPU 图形处理器&#xff08;GPU&#xff09;是一种通常用于进行快速数学计…

学习Java的第六天

目录 一、变量 1、变量的定义 2、变量的声明格式 3、变量的注意事项 4、变量的作用域 二、常量 三、命名规范 Java 语言支持如下运算符&#xff1a; 1、算术运算符 解析图&#xff1a; 示例&#xff1a; 2、赋值运算符 解析图&#xff1a; 示例&#xff1a; 3、关…

Midjourney绘图欣赏系列(十)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…

pip 和conda 更换镜像源介绍

1、前言 很多深度学习的项目免不了安装库文件、配置环境等等&#xff0c;如果利用官方提供的连接&#xff0c;网速很慢&#xff0c;而且很容易download掉。 所以配置好了虚拟环境&#xff0c;将pip换源属实重要 常见的国内镜像源有清华、中科大、阿里等等... 这里建议用中科…

使用Amazon Bedrock托管的Claude3 学习中国历史

最近被Amazon Bedrock托管的Claude3 刷屏了&#xff0c;那么先简单介绍下什么是Claude 3。 Claude 3是Anthropic 推出了下一代 Claude模型&#xff0c;针对不同用例进行优化的三种先进模型&#xff1a;Claude 3 Haiku、Claude 3 Sonnet 和 Claude 3 Opus&#xff0c;使用户能够…

Django入门 整体流程跑通

Django学习笔记 一、Django整体流程跑通 1.1安装 pip install django //安装 import django //在python环境中导入django django.get_version() //获取版本号&#xff0c;如果能获取到&#xff0c;说明安装成功Django目录结构 Python310-Scripts\django-admi…

nginx代理参数proxy_pass

proxy_pass参数用于配置反向代理&#xff0c;指定客户端请求被转发到后端服务器&#xff0c;后端地址可以是域名、ip端口URI 代理后端报错提示本地找不到CSS文件、JavaScript文件或图片 例如&#xff1a; nginx &#xff1a;10.1.74.109 后端服务&#xff1a;http://10.1.74.…

华为北向网管NCE开发教程(3)CORBA协议开发

华为北向网管NCE开发教程&#xff08;1&#xff09;闭坑选接口协议 华为北向网管NCE开发教程&#xff08;2&#xff09;REST接口开发 华为北向网管NCE开发教程&#xff08;3&#xff09;CORBA协议开发 华为北向网管NCE开发教程&#xff08;4&#xff09;&#xff08;源代码接口…

嵌入式学习第二十六天!(网络传输:TCP编程、HTTP协议)

TCP通信&#xff1a; 1. TCP发端&#xff1a; socket -> connect -> send -> recv -> close 2. TCP收端&#xff1a; socket -> bind -> listen -> accept -> recv -> send -> close 3. TCP需要用到的函数&#xff1a; 1. co…

【脚本开发】脚本的启动与暂停

文章目录 需求简单实现测试代码 更新&#xff1a;添加两个方法 需求 基于pynput库开发一个脚本。 要能够用按键控制它启动&#xff0c;暂停。 简单实现 key参数&#xff0c;代表了用什么键控制。 state属性&#xff0c;代表了当前的开关状态。 listener属性&#xff0c;是…

3.基础算法之搜索与图论

1.深度优先搜索 深度优先搜索&#xff08;DFS&#xff0c;Depth First Search&#xff09;是一种用于遍历或搜索树或图的算法。它将当前状态按照一定的规则顺序&#xff0c;先拓展一步得到一个新状态&#xff0c;再对这个新状态递归拓展下去。如果无法拓展&#xff0c;则退回…

STM32 通过Modbus协议更改内部Flash(模仿EEPROM)的运行参数

main.c测试 uint8_t uart1RxBuf[64]{0};uint8_t Adc1ConvEnd0; uint8_t Adc2ConvEnd0;int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initial…

【C语言刷题】——初识位操作符

【C语言刷题】——初识位操作符 位操作符介绍题一、 不创建临时变量&#xff08;第三个变量&#xff09;&#xff0c;实现两个数的交换&#xff08;1&#xff09;法一&#xff08;2&#xff09;法二 题二、 求一个数存储在内存中的二进制中“一”的个数&#xff08;1&#xff0…