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

在这里插入图片描述

Python 颜色检测项目

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

什么是颜色检测?

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

关于 Python 颜色检测项目

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

数据集

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

  • 颜色数据集

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

必备知识

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

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

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

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

  1. 下载并解压 zip 文件
    颜色检测 ZIP 文件

项目文件夹包含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, clickedclicked = Truexpos = xypos = yb, 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 = 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
  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 <在这里添加你的图像路径>
输出

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

  • 双击窗口以知道像素的颜色名称
  • import cv2 - Python 小项目
  • def getColorName - Python 项目
  • while (1) - Python 数据科学项目
总结

在这个带有源代码的 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.rhkb.cn/news/3162.html

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

相关文章

【k8s面试题2025】3、练气中期

体内灵气的量和纯度在逐渐增加。 文章目录 在 Kubernetes 中自定义 Service端口报错常用控制器Kubernetes 中拉伸收缩副本失效设置节点容忍异常时间Deployment 控制器的升级和回滚日志收集资源监控监控 Docker将 Master 节点设置为可调度 在 Kubernetes 中自定义 Service端口报…

数智化转型 | 星环科技Defensor 助力某银行数据分类分级

在数据驱动的金融时代&#xff0c;数据安全和隐私保护的重要性日益凸显。某银行作为数字化转型的先行者&#xff0c;面临着一项艰巨的任务&#xff1a;如何高效、准确地对分布在多个业务系统、业务库与数仓数湖中的约80万个字段进行数据分类和分级。该银行借助星环科技数据安全…

mac配置 iTerm2 使用lrzsz与服务器传输文件

mac配置 1. 安装支持rz和sz命令的lrzsz brew install lrzsz2. 下载iterm2-send-zmodem.sh和iterm2-recv-zmodem.sh两个脚本 # 克隆仓库 git clone https://github.com/aikuyun/iterm2-zmodem ~/iterm2-zmodem# 进入到仓库目录 cd ~/iterm2-zmodem# 设置脚本文件可执行权限 c…

redis 分布式重入锁

文章目录 前言一、分布式重入锁1、单机重入锁2、redis重入锁 二、redisson实现重入锁1、 添加依赖2、 配置 Redisson 客户端3、 使用 Redisson 实现重入锁4、 验证5、运行项目 三、redisson分布式锁分析1、获取锁对象2、 加锁3、订阅4、锁续期5、释放锁6、流程图 前言 通过前篇…

【git】如何删除本地分支和远程分支?

1.如何在 Git 中删除本地分支 本地分支是您本地机器上的分支&#xff0c;不会影响任何远程分支。 &#xff08;1&#xff09;在 Git 中删除本地分支 git branch -d local_branch_name git branch 是在本地删除分支的命令。-d是一个标志&#xff0c;是命令的一个选项&#x…

关于 Cursor 的一些学习记录

文章目录 1. 写在最前面2. Prompt Design2.1 Priompt v0.1&#xff1a;提示设计库的首次尝试2.2 注意事项 3. 了解 Cursor 的 AI 功能3.1 问题3.2 答案 4. cursor 免费功能体验5. 写在最后面6. 参考资料 1. 写在最前面 本文整理了一些学习 Cursor 过程中读到的或者发现的感兴趣…

使用python+pytest+requests完成自动化接口测试(包括html报告的生成和日志记录以及层级的封装(包括调用Json文件))

一、API的选择 我们进行接口测试需要API文档和系统&#xff0c;我们选择JSONPlaceholder免费API&#xff0c;因为它是一个非常适合进行接口测试、API 测试和学习的工具。它免费、易于使用、无需认证&#xff0c;能够快速帮助开发者模拟常见的接口操作&#xff08;增、删、改、…

【Rust自学】13.2. 闭包 Pt.2:闭包的类型推断和标注

13.2.0. 写在正文之前 Rust语言在设计过程中收到了很多语言的启发&#xff0c;而函数式编程对Rust产生了非常显著的影响。函数式编程通常包括通过将函数作为值传递给参数、从其他函数返回它们、将它们分配给变量以供以后执行等等。 在本章中&#xff0c;我们会讨论 Rust 的一…

无人机技术架构剖析!

一、飞机平台系统 飞机平台系统是无人机飞行的主体平台&#xff0c;主要提供飞行能力和装载功能。它由机体结构、动力装置、电气设备等组成。 机体结构&#xff1a;无人机的机身是其核心结构&#xff0c;承载着其他各个组件并提供稳定性。常见的机身材料包括碳纤维、铝合金、…

Axios封装一款前端项目网络请求实用插件

前端项目开发非常经典的插件axios大家都很熟悉&#xff0c;它是一个Promise网络请求库&#xff0c;可以用于浏览器和 node.js 支持的项目中。像一直以来比较火的Vue.js开发的几乎所有项目网络请求用的都是axios。那么我们在实际的项目中&#xff0c;有时候为了便于维护、请求头…

【c++继承篇】--继承之道:在C++的世界中编织血脉与传承

目录 引言 一、定义二、继承定义格式2.1定义格式2.2继承关系和访问限定符2.3继承后子类访问权限 三、基类和派生类赋值转换四、继承的作用域4.1同名变量4.2同名函数 五、派生类的默认成员构造函数5.1**构造函数调用顺序&#xff1a;**5.2**析构函数调用顺序&#xff1a;**5.3调…

LDD3学习8--linux的设备模型(TODO)

在LDD3的十四章&#xff0c;是Linux设备模型&#xff0c;其中也有说到这个部分。 我的理解是自动在应用层也就是用户空间实现设备管理&#xff0c;处理内核的设备事件。 事件来自sysfs和/sbin/hotplug。在驱动中&#xff0c;只要是使用了新版的函数&#xff0c;相应的事件就会…

Python基于Django的图像去雾算法研究和系统实现(附源码,文档说明)

博主介绍&#xff1a;✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3…

Python爬虫(5) --爬取网页视频

文章目录 爬虫爬取视频 指定url发送请求 UA伪装请求页面 获取想要的数据 解析定位定位音视频位置 存放视频完整代码实现总结 爬虫 Python 爬虫是一种自动化工具&#xff0c;用于从互联网上抓取网页数据并提取有用的信息。Python 因其简洁的语法和丰富的库支持&#xff08;如…

从AI原理到模型演进及代码实践 的学习二

参考&#xff1a;全面解析&#xff1a;从AI原理到模型演进及代码实践-CSDN博客 训练过程 Transformer仅一个Encoder模块就可以工作&#xff0c;可以处理信息抽取、识别、主体识别等任务&#xff0c;比如 BERT&#xff08;Bidirectional Encoder Representations from Transfor…

利用EXCEL进行XXE攻击

0X00 前言 CTF 选手都清楚我们像 word 文档格式改成 zip 格式后&#xff0c;再解压缩可以发现其中多数是描述工作簿数据、元数据、文档信息的 XML 文件。实际上&#xff0c;与所有 post-Office 2007 文件格式一样&#xff0c;现代 Excel 文件实际上只是 XML 文档的 zip 文件。…

在Mac mini上实现本地话部署AI和知识库

在Mac mini上实现本地话部署AI和知识库 硬件要求&#xff1a;大模型AI&#xff0c;也叫LLM&#xff0c;需要硬件支持&#xff0c;常见的方式有2种&#xff1a;一种是采用英伟达之类支持CUDA库的GPU芯片或者专用AI芯片&#xff1b;第二种是采用苹果M系列芯片架构的支持统一内存架…

鸿蒙UI(ArkUI-方舟UI框架)-开发布局

文章目录 开发布局1、布局概述1&#xff09;布局结构2&#xff09;布局元素组成3&#xff09;如何选择布局4&#xff09;布局位置5&#xff09;对子元素的约束 2、构建布局1&#xff09;线性布局 (Row/Column)概述布局子元素在排列方向上的间距布局子元素在交叉轴上的对齐方式(…

指针的进阶

指针的主题&#xff0c;我们在初级阶段的《指针》章节已经接触过了&#xff0c;我们知道了指针的概念&#xff1a; 1. 指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识一块内存空间。 2. 指针的大小是固定的4/8个字节&#xff08;32位平台/64位平台&#xff0…

B站评论系统的多级存储架构

1. 背景 评论是 B站生态的重要组成部分&#xff0c;涵盖了 UP 主与用户的互动、平台内容的推荐与优化、社区文化建设以及用户情感满足。B站的评论区不仅是用户互动的核心场所&#xff0c;也是平台运营和用户粘性的关键因素之一&#xff0c;尤其是在与弹幕结合的情况下&#xf…