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

【机器学习实战入门】使用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, 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 <在这里添加你的图像路径>

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

输出

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

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

在这里插入图片描述

总结

在这个带有源代码的 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

相关文章:

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

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

一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建

文章目录 一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建1. 先回忆webpack是个啥2. webpack四大核心2.1 Entry(入口)2.2 Output(输出)2.3 Loader(加载器)2.4 Plugin(插件) 3. 按部就班实现webpack3.1 初始化项目3.2 完成项目骨架搭建3.3 实现webpack构建 一文…...

RabbitMQ基础篇

文章目录 1 RabbitMQ概述1.1 消息队列1.2 RabbitMQ体系结构 2 RabbitMQ工作模式2.1 简单模式&#xff08;Simple Queue&#xff09;2.2 工作队列模式&#xff08;Work Queues&#xff09;2.3 发布/订阅模式&#xff08;Publish/Subscribe&#xff09;2.4 路由模式&#xff08;R…...

GPT-5 传言:一场正在幕后发生的 AI 变革

新的一年&#xff0c;让我们从一个引人入胜的话题开始&#xff1a;如果我告诉你&#xff0c;GPT-5 并非虚构&#xff0c;而是真实存在呢&#xff1f;它不仅真实存在&#xff0c;而且正在你看不见的地方悄然塑造着世界。我的基本假设是&#xff1a;OpenAI 已经秘密开发出 GPT-5&…...

CSS布局与响应式

学习链接 Grid网格布局 前端五大主流网页布局 flex布局看这一篇就够了 grid布局看这一篇就够了 用六个案例学会响应式布局 伸缩盒响应式页面布局实战 实现响应式布局的五种方式 - csdn 如何完成响应式布局&#xff0c;有几种方法&#xff1f;看这个就够了 响应式布局总…...

C++的auto_ptr智能指针:从诞生到被弃用的历程

C作为一种功能强大的编程语言&#xff0c;为开发者提供了众多便捷的特性和工具&#xff0c;其中智能指针是其重要特性之一。智能指针能够自动管理内存&#xff0c;有效避免内存泄漏等常见问题。然而&#xff0c;并非所有智能指针都尽善尽美&#xff0c;auto_ptr便是其中的一个例…...

iOS - Objective-C 底层实现中的哈希表

1. 关联对象存储&#xff08;AssociationsHashMap&#xff09; // 关联对象的哈希表实现 typedef DenseMap<const void *, ObjcAssociation> ObjectAssociationMap; typedef DenseMap<DisguisedPtr<objc_object>, ObjectAssociationMap> AssociationsHashMa…...

什么是软件架构

什么是软件架构 程序员说&#xff0c;软件架构是要决定编写哪些C程序或OO类、使用哪些库和框架 程序经理说&#xff0c;软件架构就是模块的划分和接口的定义 系统分析员说&#xff0c;软件架构就是为业务领域对象的关系建模 配置管理员说&#xff0c;软件架构就是开发出来的…...

【Golang/nacos】nacos配置的增删查改,以及服务注册的golang实例及分析

前言 本文分析的实例来源于nacos在github上的开源仓库 nacos配置的增删查改 先具体来看一段代码&#xff0c;我将逐步分析每一段的作用 package mainimport ("fmt""time""github.com/nacos-group/nacos-sdk-go/clients""github.com/naco…...

RabbitMQ集群安装rabbitmq_delayed_message_exchange

1、单节点安装rabbitmq安装延迟队列 安装延迟队列rabbitmq_delayed_message_exchange可以参考这个文章&#xff1a; rabbitmq安装延迟队列-CSDN博客 2、集群安装rabbitmq_delayed_message_exchange 在第二个节点 join_cluster 之后&#xff0c;start_app 就会报错了 (CaseC…...

Linux UDP 编程详解

一、引言 在网络编程领域&#xff0c;UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;作为一种轻量级的传输层协议&#xff0c;具有独特的优势和适用场景。与 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff0…...

【2024年华为OD机试】(B卷,100分)- 计算最接近的数 (Java JS PythonC/C++)

一、问题描述 题目解析 我们需要找到一个下标 i&#xff0c;使得表达式 X[i] - X[i 1] - ... - X[i K - 1] 的结果最接近于数组的中位数。如果有多个 i 满足条件&#xff0c;则返回最大的 i。 关键点&#xff1a; 中位数计算&#xff1a; 将数组排序后&#xff0c;中位数…...

Pytorch 自学笔记(三):利用自定义文本数据集构建Dataset和DataLoader

Pytorch 自学笔记&#xff08;三&#xff09; 1. Dataset与DataLoader1.1 torch.utils.data.Dataset1.2 torch.utils.data.DataLoader Pytorch 自学笔记系列的第三篇。针对Pytorch的Dataset和DataLoader进行简单的介绍&#xff0c;同时&#xff0c;介绍如何使用自定义文本数据集…...

QT 使用QSqlTableModel对数据库进行创建,插入,显示

文章目录 效果图概述功能点代码分析初始数据插入数据数据显示 总结 效果图 概述 本案例用于对数据库中的数据进行显示等其他操作&#xff0c;其他表格筛选&#xff0c;过滤等功能可看此博客 框架&#xff1a;数据模型使用QSqlTableModel&#xff0c;视图使用QTableView&#x…...

如何学习Transformer架构

Transformer架构自提出以来&#xff0c;在自然语言处理领域引发了革命性的变化。作为一种基于注意力机制的模型&#xff0c;Transformer解决了传统序列模型在并行化和长距离依赖方面的局限性。本文将探讨Transformer论文《Attention is All You Need》与Hugging Face Transform…...

浅谈云计算22 | Kubernetes容器编排引擎

Kubernetes容器编排引擎 一、Kubernetes管理对象1.1 Kubernetes组件和架构1.2 主要管理对象类型 二、Kubernetes 服务2.1 服务的作用与原理2.2 服务类型 三、Kubernetes网络管理3.1 网络模型与目标3.2 网络组件3.2.1 kube-proxy3.2.2 网络插件 3.3 网络通信流程 四、Kubernetes…...

计算 SAMOut V3 在将词汇表从1万 增加到6千万的情况下能够减少多少参数

当我们将词汇表从 60,000,000&#xff08;六千万&#xff09;减少到 10,000 时&#xff0c;实际上是在缩小模型的词嵌入层及其共享的语言模型头&#xff08;LM Head&#xff09;的规模。这将导致参数量显著减少。我们可以通过以下步骤来计算具体的参数减少量。 参数量减少计算…...

03.选择排序

一、题目思路 选择排序是一种简单直观的排序算法。它的工作原理是&#xff1a;首先在未排序序列中找到最小&#xff08;或最大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&#xff08;或最大&#xff…...

02_登录窗口

新建场景 重命名为GameRoot 双击GameRoot进入新场景 同样摄像机清除格式 删除平行光并关闭渲染灯光的天空盒 新建空节点重命名为GameRoot GameRoot为游戏的根节点 在整个游戏中都不会被删除 在游戏的根节点下创建UI的根节点Canvas 创建一个空节点 作为UI根节点下的 登录场景UI…...

NodeJS | 搭建本地/公网服务器 live-server 的使用与安装

目录 介绍 安装 live-server 安装方法 安装后的验证 环境变量问题 Node.js 环境变量未配置正确 全局安装的 live-server 路径未添加到环境变量 运行测试 默认访问主界面 访问文件 报错信息与解决 问题一&#xff1a;未知命令 问题二&#xff1a;拒绝脚本 公网配置…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...