使用Python 机器学习-3-使用 Pandas 和 OpenCV 进行颜色检测

一、前言

该文章仅作为个人学习使用

项目源代码:Python 项目 - 使用 Pandas 和 OpenCV 进行颜色检测 - DataFlair (data-flair.training)

数据集:color-names/output/colors.csv at master · codebrainz/color-names (github.com)

二、正文

Python颜色检测项目

今天的项目将是令人兴奋和有趣的构建。我们将使用颜色,您将在整个项目中了解许多概念。颜色检测是识别物体所必需的,它也被用作各种图像编辑和绘图应用程序中的工具。

什么是颜色检测?

颜色检测是检测任何颜色名称的过程。很简单,不是吗?嗯,对于人类来说,这是一项非常容易的任务,但对于计算机来说,这并不简单。人眼和大脑协同工作,将光转化为颜色。存在于我们眼睛中的光感受器将信号传递到大脑。然后我们的大脑识别颜色。从孩提时代起,我们就用它们的颜色名称绘制了某些灯。我们将使用相同的策略来检测颜色名称。

Python 中的颜色检测项目

关于 Python 项目

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

数据集

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

颜色数据集

csv文件包括865个颜色名称沿着以及它们的RGB和十六进制值。

先决条件

在开始这个Python项目的源代码之前,你应该熟悉Python的计算机视觉库OpenCVPandas

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

pip install opencv-python numpy pandas

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

以下是在Python中构建可以检测颜色的应用程序的步骤:

1.下载并解压缩zip文件

颜色检测Zip文件

项目文件夹包含3个文件:

  • Color_detection.py -我们项目的主要源代码。
  • Colorpic.jpg
  • csv -包含我们数据集的文件。

2.从用户获取图像

我们使用argparse库来创建一个参数解析器。我们可以直接从命令提示符给出一个图像路径:

导入argparse
ap = argparse。ArgumentParser()
AP.add_argument('-i'字符串, '--image',required=,帮助=“图像路径”)
参数= vars(AP.parse_args())
img_path = args[“形象”]
#使用opencv阅读图像
IMG = cv2。伊梅雷德(img_path)

3.接下来,我们用pandas读取CSV文件

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

#用pandas阅读csv文件并给每个列命名
指数=[“色”,“颜色_名称”,“十六进制”,“R”,“G”,“B”]
csv = pd。read_csv('colors.csv',names=index,header=None)

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

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

cv2.namedWindow(“形象”)
cv2.setMouseCallback(“形象”,draw_function)

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

5.创建draw_function

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

def 绘图功能(事件,x,y,标志,参数):
如果 事件== cv2。事件_LBUTTONDBLCLK:
全局B,g,r,xpos,ypos,点击
点击=
xpos = x
Y = Y
B,g,r = img[y,x]
B = int(B)
G = int(G)
R = int(R)

6.计算距离以获得颜色名称

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

我们的距离是通过这个公式计算的:

d = abs(红色- ithRedColor)+(绿色- ithGreenColor)+(蓝色- ithBlueColor)

def getColorName字体(R、G、B):
最小值= 10000
范围(透镜(CSV)):
D = ABS(R- int(CSV。loc[我,“R”])) + ABS(G- int(CSV。loc[我,“G”]))+ ABS(B- int(CSV。loc[我,“B”]))
如果(D<=最小):
最小值= d
cname = csv。loc[我,“颜色_名称”]
返回 CNAME

7.在窗口上显示图像

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

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

(1):
cv2.imshow(“意象”,img)
如果 (点击):
#cv2.rectangle(image,startpoint,endpoint,color,thickness)-1厚度完全填充矩形
cv2.矩形(img,(20,20), (750,60), (B,g,r), -1)
#创建要显示的文本字符串(颜色名称和RGB值)
text = getColorName字体(r、g、B) + ' R='+ str(R) + ' G='+ str(G) + “B=”+ str(B)
#cv2.putText(img,text,start,font(0-7),fontScale,color,thickness,lineType,(optional bottomLeft bool))
cv2.putText(img,文本,(50,50),2,0.8,(255,255,255),2、cv2.线_AA)
#对于非常浅的颜色,我们将以黑色显示文本
如果(r+g+B>=600):
cv2.putText(img,文本,(50,50),2,0.8,(0,0,0),2、cv2.线_AA)
点击=
#当用户按“esc”键时中断循环
如果 cv2.waitKey(20) & 0xFF ==27:
打破
cv2.destroyAllWindows()

8.运行Python文件

初学者Python项目现在已经完成,您可以从命令提示符运行Python文件。确保使用“-i”参数给出图像路径。如果图像在另一个目录中,则需要提供图像的完整路径:

python颜色检测。py - 我 <在此添加您的图像路径>

running python mini project

截图:

import cv2 - python mini project

def getColorName - project in python

while (1) python data science project

输出:

双击窗口可以知道像素颜色的名称

red color detection - python mini project

yellow color detection - python project with source code

blue color detection - python mini project

三、总结

在这个包含源代码的Python项目中,我们学习了颜色以及如何提取颜色RGB值和像素的颜色名称。我们学习了如何处理双击窗口等事件,并了解了如何使用pandas读取CSV文件并对数据执行操作。这在许多图像编辑和绘图应用程序中使用。

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值