颜色检测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, 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.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/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Raspberry Pi树莓派CODESYS PLC控制器解决方案,提供license和实时系统

我们提供正版codesys license和实时系统集成服务。 使用树莓派制作一个CODESYS的PLC控制器 树莓派上实现控制器 1. 安装CodeSys编程环境 1.1 下载CODESYS 1.2 安装CODESYS开发环境 1.3 运行CODESYS开发环境 2. 运行CODESYS开发环境 2.1 创建项目 2.2 编辑程序 2.3 编译程序 2.4…

如何避免MYSQL主从延迟带来的读写问题?

在MYSQL 部署架构选型上&#xff0c;许多公司都会用到主从读写分离的架构&#xff0c;如下是一个一主一从的架构&#xff0c;主库master负责写入&#xff0c;从库slave进行读取。 但是既然是读写分离&#xff0c;必然会面临这样一个问题&#xff0c;当在主库上进行更新后&#…

跨平台大小端判断与主机节序转网络字节序使用

1.macOS : 默认使用小端 ,高位使用高地址,转换为网络字节序成大端 #include <iostream> #include <arpa/inet.h> int main() {//大小端判断union{short s;char c[sizeof(short)];}un;un.s = 0x0102;printf("低地址:%d,高地址:%d\n",un.c[0],un.c[1]);if …

排序类算法

目录 一、交换类排序 1.冒泡排序 2.快速排序 二、 插入排序 1.直接插入排序 2.折半插入排序 3.希尔排序 三、选择排序 1.简单选择排序 2.堆排序 完整代码 四、归并排序 完整代码 五、汇总 六、OJ练习 1.冒泡排序&#xff1a;正确表示前一个数和后一个数 2.选…

线下活动线上同步直播?媒体同步直播的好处

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 线下活动线上同步直播&#xff0c;即利用互联网技术将线下活动的实时内容传输到线上平台&#xff0c;供无法到场的观众在线观看。这种直播方式的好处主要体现在以下几个方面&#xff1a;…

010Editor汉化版+下载+注册码+模板bug

项目场景&#xff1a; 这天我想使用我的不知名的一个破解版本的010Edit来查看一个EXE程序&#xff0c;并想使用模板功能&#xff0c;但是发现没有该模板还无法下载最新模板 问题描述 010Edit联网后需要注册码&#xff1a; 010 Editor 激活码生成器 使用方法 参照教程使用0…

AI新晋王者Claude3完胜ChatGPT4?

1 引言 新王即位&#xff1f;ChatGPT 4跌下神坛? 3月4日&#xff0c;OpenAI 的主要竞争对手之一Anthropic发布了最新的Claude 3系列模型&#xff0c;并宣称claude3系列在推理、数学、编程、多语言理解和视觉方面都树立了新的行业基准。Claude家族包括了Claude 3 Haiku, Clau…

pycharm中连接远程服务器

文章目录 概要文件进行映射将本地的project和远程的project进行映射&#xff0c;一定要使用sftp本地文件和远程的位置配置不想将远程的文件同步时候&#xff0c;可以进行下面设置 配置远程服务器的python解释器需要setting-->python interpreter-->add---> on ssh选择…

车规芯片为什么需要信息安全(1)

目录 1.汽车出现过被黑客攻击事件吗&#xff1f; 2.汽车信息安全标准汇总 2.1 国际标准 2.2 国内标准 3.车规芯片的信息安全应该从什么地方考虑 3.1 芯片硬件安全防护能力 3.2 车规芯片的信息安全服务 3.3 芯片厂如何证明芯片的信息安全能力 4.小结 这个来自家里人的灵…

Spring Cloud Gateway自定义断言

问题&#xff1a;Spring Cloud Gateway自带的断言&#xff08;Predicate&#xff09;不满足业务怎么办&#xff1f;可以自定义断言&#xff01; 先看Spring Cloud Gateway是如何实现断言的 Gateway中断言的整体架构如下&#xff1a; public abstract class AbstractRoutePred…

【pycharm使用ssh连接服务器】

2、pycharm使用ssh连接服务器 1、具体流程2、一些需要注意的小问题2.1 更改代码地址2.2 本地代码上传到服务器2.3 在服务器的环境中上新安装库&#xff0c;但是pycharm检测不到 1、具体流程 打开pycharm – File – Setting 输入服务器的IP地址&#xff0c;端口号、登录账号名…

指令调用模板

也就是这边指令通过id和map会定位到一个结构体&#xff0c;然后这个结构再赋值两个成员&#xff0c;一个是函数一个是指令类型&#xff0c;然后这个函数是模板的实例化 使用的时候就传进去&#xff0c;这只是参数&#xff0c;最开始初始化的时候模板就已经实例化了。然后关于模…

嵌入式软件开发工程师如何提高C语言编码技能?

嵌入式软件开发工程师如何提高C语言编码技能&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提升…

[Unity3D]--更换天空盒子

我们原来的天空盒子是这样的。 感觉不是特别满意&#xff0c;想换一个更好看的。 去资源商店找个好看的 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 例如这个 然后在Window>Rendering>Lighting里的环境选项里更换材质 更换&#xff1a; ​ …

【Echarts】柱状图上方显示数字以及自定义值,标题和副标题居中,鼠标上显示信息以及自定义信息

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

h5企微插件之WeixinJSBridge、iframe通过cors-anywhere加载微信文章实践

项目背景 公司有一个运营同事使用的素材库&#xff0c;是h5开发的企微插件&#xff0c;原本素材主要是公司域名的文章&#xff0c;点击文章可以进入详情页查看文章内容&#xff0c;并且可以转发客户、群发客户、发朋友圈等。现在希望可以支持非公司域名的文章&#xff0c;主要…

【SpringCloud微服务全家桶学习笔记-GateWay网关(微服务入口)】

Gateway服务网关 API网关为微服务架构中的服务提供了统一的访问入口&#xff0c;客户端通过API网关访问相关服务。API网关的定义类似于设计模式中的门面模式&#xff0c;它相当于整个微服务架构中的门面&#xff0c;所有客户端的访问都通过它来进行路由及过滤。它实现了请求路…

ElasticSearch深度分页问题如何解决

文章目录 概述解决方法深度分页方式from size深度分页之scrollsearch_after 三种分页方式比较 概述 Elasticsearch 的深度分页问题是指在大数据集上进行大量分页查询时可能导致的性能下降和资源消耗增加的情况。这种情况通常发生在需要访问大量数据的情形下&#xff0c;比如用…

二,几何相交---4,BO算法---(2)比较和排序

在某一时刻xt&#xff0c;扫描线从左到右时&#xff0c;一部分线段会与扫描线相交&#xff0c;此时此刻&#xff0c;线段可以分成高低顺序&#xff0c; 那么对于给定两条线段&#xff0c;是如何变化的呢&#xff1f;有两个端点&#xff0c;左端点和右端点&#xff0c; 三种情况…