注意:本文引用自专业人工智能社区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, clicked
clicked = True
xpos = x
ypos = y
b,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 = 10000
for 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 = d
cname = csv.loc[i,"color_name"]
return cname
5. 在窗口上显示图像
每当发生双击事件时,都会更新窗口上的颜色名称和 RGB 值。
使用cv2.imshow()函数,我们在窗口上绘制图像。当用户双击窗口时,我们绘制一个矩形并获取颜色名称,以使用cv2.rectangle和cv2.putText()函数在窗口上绘制文本。
6. 运行Python文件
运行 Python 文件即可。
python <strong>Color_detection.py</strong>
结果展示如下:
下载并解压zip文件
其中包含全部的项目文件,项目文件夹包含3个文件:
- Color_detection.py – 我们项目的主要源代码。
- Colorpic.jpg – 用于实验的示例图像。
- Colors.csv – 包含我们的数据集的文件。
完整代码请参考源网站:https://www.aideeplearning.cn/1691-2/