当前位置: 首页 > article >正文

【机器学习实战入门】使用Pandas和OpenCV进行颜色检测

在这里插入图片描述

Python 颜色检测项目

今天的项目将非常有趣和令人兴奋。我们将与颜色打交道,并在项目过程中学习许多概念。颜色检测对于识别物体来说是必要的,它也被用作各种图像编辑和绘图应用的工具。

什么是颜色检测?

颜色检测是检测任何颜色名称的过程。这看起来很简单,对吧?对于人类来说,这是一个极其简单的任务,但对于计算机来说,却不是那么直接。人眼和大脑协同工作将光转化为颜色。我们眼睛中的光感受器将信号传输给大脑,大脑再识别颜色。从小开始,我们就将某些光线与它们的颜色名称联系起来。我们将使用类似的方法来检测颜色名称。
在这里插入图片描述

关于 Python 颜色检测项目

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

数据集

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

  • https://download.csdn.net/download/jrckkyy/90283529

colors.csv 文件包含 865 个颜色名称以及它们的 RGB 和十六进制值。

必备知识

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

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

pip install opencv-python numpy pandas
构建 Python 颜色检测项目的步骤

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

  1. 下载并解压 zip 文件
  • https://download.csdn.net/download/jrckkyy/90283529

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

  • Color_detection.py – 项目的主要源代码。
  • Colorpic.jpg – 用于实验的样本图片。
  • Colors.csv – 包含我们数据集的文件。
  1. 从用户那里获取图像
    我们使用 argparse 库创建一个参数解析器。我们可以直接从命令提示符中提供图像路径:
import argparse
ap = argparse.ArgumentParser()
ap.add_argument('-i', '--image', required=True, help="Image Path")
args = vars(ap.parse_args())
img_path = args['image']
# 使用 OpenCV 读取图像
img = cv2.imread(img_path)
  1. 用 pandas 读取 CSV 文件
    当需要对数据文件如 CSV 进行各种操作时,pandas 库非常有用。pd.read_csv() 读取 CSV 文件并将其加载到 pandas DataFrame 中。我们给每个列分配了一个名称,以便于访问。
# 使用 pandas 读取 CSV 文件并命名每一列
index=["color","color_name","hex","R","G","B"]
csv = pd.read_csv('colors.csv', names=index, header=None)
  1. 在窗口上设置鼠标回调事件
    首先,我们创建一个窗口以显示输入的图像。然后,当鼠标事件发生时,我们设置一个回调函数,该函数将被调用。
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_function)

通过这些代码行,我们将窗口命名为 ‘image’,并在鼠标事件发生时调用 draw_function()

  1. 创建 draw_function
    它会计算我们双击的像素的 RGB 值。函数参数包括事件名称、鼠标位置的 (x,y) 坐标等。在函数中,我们检查事件是否为双击,如果是,则计算并设置 r、g、b 值以及鼠标的位置。
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)
  1. 计算距离以获取颜色名称
    我们有 r、g 和 b 的值。现在,我们需要另一个函数,该函数将从 RGB 值返回颜色名称。为了获得颜色名称,我们计算一个距离(d),该距离告诉我们我们离颜色有多近,并选择距离最短的那一个。

我们的距离由以下公式计算:

d = abs(Red – ithRedColor) + abs(Green – ithGreenColor) + abs(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
  1. 在窗口上显示图像
    每当双击事件发生时,它将更新窗口上的颜色名称和 RGB 值。

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

while(1):
    cv2.imshow("image", img)
    if (clicked):
        # cv2.rectangle(image, startpoint, endpoint, color, thickness) -1 厚度填满整个矩形
        cv2.rectangle(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, (可选的 bottomLeft bool) )
        cv2.putText(img, text, (50, 50), 2, 0.8, (255, 255, 255), 2, cv2.LINE_AA)
        # 对于非常浅的颜色,我们将在黑色背景下显示文本
        if(r + g + b >= 600):
            cv2.putText(img, text, (50, 50), 2, 0.8, (0, 0, 0), 2, cv2.LINE_AA)
        clicked = False
    # 当用户按下 'esc' 键时中断循环
    if cv2.waitKey(20) & 0xFF == 27:
        break
cv2.destroyAllWindows()
  1. 运行 Python 文件
    现在这个简单的 Python 项目已经完成,你可以从命令提示符中运行 Python 文件。确保使用 ‘-i’ 参数提供图像路径。如果图像位于另一个目录中,则需要提供图像的完整路径:
python color_detection.py -i <在这里添加你的图像路径>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

输出

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

总结

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

参考文献

名称链接
DataFlair Python Projectshttps://data-flair.training/blogs/python-projects/
Python Color Detection Projecthttps://data-flair.training/blogs/python-color-detection-project/
OpenCV Documentationhttps://docs.opencv.org/4.5.1/
Pandas Documentationhttps://pandas.pydata.org/pandas-docs/stable/
Python for Image Processinghttps://realpython.com/python-opencv-color-spaces/
What is Color Detection?https://www.geeksforgeeks.org/color-detection-python-opencv/
How to use argparse in Pythonhttps://docs.python.org/3/howto/argparse.html
A Simple Guide to Pandashttps://towardsdatascience.com/a-simple-guide-to-pandas-2ae0753f5218
Python Colors Datasethttps://github.com/codeifitech/colordetect/blob/master/colors.csv
Color Space Conversionhttps://www.tutorialspoint.com/opencv/opencv_color_spaces.htm
OpenCV 教程https://www.bilibili.com/video/BV18x41147d6/
Python 颜色检测https://zhuanlan.zhihu.com/p/35647438
了解色彩空间https://www.runoob.com/python3/python3-tutorial.html
颜色检测实战http://blog.csdn.net/qq_33066040/article/details/78800004
Python 计算机视觉入门https://morvanzhou.github.io/tutorials/machine-learning/opencv/
用 OpenCV 构建颜色检测器https://medium.com/@billy.r---------/building-a-color-detector-with-opencv-3baf62e6fac9

http://www.kler.cn/a/509971.html

相关文章:

  • Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)
  • Redis瓶颈和调优
  • npm ERR! code CERT_HAS_EXPIRED
  • 深度学习项目--基于LSTM的火灾预测研究(pytorch实现)
  • ComfyUI-PromptOptimizer:文生图提示优化节点
  • 【从0带做】基于Springboot3+Vue3的心理健康预约平台
  • 【PyCharm】快捷键使用
  • CentOS 9 Stream 上安装飞书客户端
  • Android SystemUI——CarSystemBar车载状态栏(九)
  • QT笔记- Qt6.8.1 Android编程 手机震动实现
  • PyQt5学习-QPushButton
  • PyTorch使用教程(7)-数据集处理
  • 2.7 实战项目: GitHub openai-quickstart
  • RocketMQ源码分析之事务消息分析
  • kubernetes v1.29.XX版本HPA、KPA、VPA并压力测试
  • Json转换类型报错问题:java.lang.Integer cannot be cast to java.math.BigDecimal
  • 记录一次关于spring映射postgresql的jsonb类型的转化器事故,并使用hutool的JSONArray完成映射
  • Leetcode - 周赛432
  • leetcode34-排序数组中查找数组的第一个和最后一个位置
  • Learning Prompt
  • Kubernetes (K8s) 权限管理指南
  • 【Linux】15.Linux进程概念(4)
  • linux 安装jdk1.8
  • 【脑机接口数据处理】bdf文件转化mat文件
  • AI Prompt 设计指南:从基础构建到高质量生成的全面解析
  • h5使用video播放时关掉vant弹窗视频声音还在后台播放