OpenCV(Python)颜色识别(一)

article/2025/8/26 19:32:25

1. 基本原理

1.1 彩色模型

数字图像处理中常用的采用模型是RGB(红,绿,蓝)模型和HSV(色调,饱和度,亮度),RGB广泛应用于彩色监视器和彩色视频摄像机,我们平时的图片一般都是RGB模型。而HSV模型更符合人描述和解释颜色的方式,HSV的彩色描述对人来说是自然且非常直观的。选择使用HSV模型的另一个因为是RGB通道并不能很好地反映出物体具体的颜色信息 , 而相对于RGB空间,HSV空间能够非常直观的表达色彩的明暗,色调,以及鲜艳程度,方便进行颜色之间的对比。

1.2 HSV模型

因为时间关系,在此先写出模型关键参数,若日后有朝一日变强了再来补习理论知识。
HSV模型中颜色的参数分别是:
色调(H:hue)
饱和度(S:saturation)
亮度(V:value)

由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。
(1)色调(H:hue):用角度度量,取值范围为0°~360°,
从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。
它们的补色是:黄色为60°,青色为180°,品红为300°;
(2)饱和度(S:saturation):取值范围为0.0~1.0,值越大,颜色越饱和。
(3)亮度(V:value):取值范围为0(黑色)~255(白色)

在这里插入图片描述

1.3 RGB转成HSV

(不确定是否在未来能否用到,在此处作为学习笔记暂时记录,理论上可以通过PS来获取目标区域的准确HSV数值,但不排除未来是用机器学习后需要在程序内添加这种数值转换的函数。)

设 (r, g, b) 分别是一个颜色的红、绿和蓝坐标,它们的值是在 0 到 1 之间的实数。
设 max 等价于 r, g 和 b 中的最大者。设 min 等于这些值中的最小者。
要找到在 HSV 空间中的 (h, s, v) 值,这里的 h ∈ [0, 360)是角度的色相角,而 s, v ∈ [0,1] 是饱和度和亮度,方法如下:

max = max(R,G,B)
min = min(R,G,B)
if R == max:H = (G-B)/(max-min)
if G == max:H = 2+(B-R)/(max-min)
if B == max:H = 4+(R-G)/(max-min)
H = H * 60
if H < 0:H = H + 360
V = max(R,G,B)
S = (max-min)/max

OpenCV下有个函数可以直接将RGB模型转换为HSV模型,OpenCV中H∈ [0, 180), S ∈ [0, 255], V ∈ [0, 255]。我们知道H分量基本能表示一个物体的颜色,但是S和V的取值也要在一定范围内,因为S代表的是H所表示的那个颜色和白色的混合程度,也就说S越小,颜色越发白,也就是越浅;V代表的是H所表示的那个颜色和黑色的混合程度,也就说V越小,颜色越发黑。经过实验,识别蓝色的取值是 H在100到140,S和V都在90到255之间。一些基本的颜色H的取值可以如下设置:
Orange 0-22,Yellow 22- 38,Green 38-75,Blue 75-130,Violet 130-160,Red 160-179

1.4 通过PS获取HSV值

在寻找关于HSV相关资料时发现并没有提供一个很方便可以直接查看的值(包括百科,事实上HSV模型的各种颜色的数值其实是在RBG的基础上通过算法进行转化得到的。)为了方便(偷懒)获取到精准的HSV模型颜色数值其实可以选择第二个方法:通过Ps软件来获取需要被识别物体的具体颜色数值。
参照表(仅供参考):
在这里插入图片描述
图片来自:http://blog.csdn.net/taily_duan/article/details/51506776

在这里插入图片描述
PS中的HSV范围,H是0-360,S是0-1,V(B)是0-1
Opencv中的HSV范围,H是0-180,S是0-255,V是0-255
因此需要转换一下,把PS中H的值除以2,S乘255,V乘255,可以得到对应的opencv的HSV值。

2.OpenCV(Python3)实现

Version1.0 提取结果不尽人意但是我会在未来一段时间里不断完善此代码以达到更好的效果。
在这里插入图片描述
在这里插入图片描述

源代码:

import cv2
import numpy
def nothing(*arg):pass
# Initial HSV GUI slider values to load on program start.
icol = (18, 0, 196, 36, 255, 255)
# Lower range colour sliders.
cv2.namedWindow('colorTest')
cv2.createTrackbar('lowHue', 'colorTest', icol[0], 255, nothing)
cv2.createTrackbar('lowSat', 'colorTest', icol[1], 255, nothing)
cv2.createTrackbar('lowVal', 'colorTest', icol[2], 255, nothing)
# Higher range colour sliders.
cv2.createTrackbar('highHue', 'colorTest', icol[3], 255, nothing)
cv2.createTrackbar('highSat', 'colorTest', icol[4], 255, nothing)
cv2.createTrackbar('highVal', 'colorTest', icol[5], 255, nothing)
# Raspberry pi file path example.
# frame = cv2.imread('/home/pi/python3/opencv/color-test/colour-circles-test.jpg')
# Windows file path example.
frame = cv2.imread('C:/Users/Administrator/Desktop/IMG_20200628_170115.jpg')while True:# Get HSV values from the GUI sliders.lowHue = cv2.getTrackbarPos('lowHue', 'colorTest')lowSat = cv2.getTrackbarPos('lowSat', 'colorTest')lowVal = cv2.getTrackbarPos('lowVal', 'colorTest')highHue = cv2.getTrackbarPos('highHue', 'colorTest')highSat = cv2.getTrackbarPos('highSat', 'colorTest')highVal = cv2.getTrackbarPos('highVal', 'colorTest')# Show the original image.cv2.imshow('frame', frame)# Blur methods available, comment or uncomment to try different blur methods.frameBGR = cv2.GaussianBlur(frame, (7, 7), 0)#frameBGR = cv2.medianBlur(frameBGR, 7)#frameBGR = cv2.bilateralFilter(frameBGR, 15 ,75, 75)# Show blurred image.cv2.imshow('blurred', frameBGR)# HSV (Hue, Saturation, Value).# Convert the frame to HSV colour model.hsv = cv2.cvtColor(frameBGR, cv2.COLOR_BGR2HSV)# HSV values to define a colour range.colorLow = numpy.array([lowHue, lowSat, lowVal])colorHigh = numpy.array([highHue, highSat, highVal])mask = cv2.inRange(hsv, colorLow, colorHigh)# Show the first maskcv2.imshow('mask-plain', mask)kernal = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7, 7))mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernal)mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernal)# Show morphological transformation maskcv2.imshow('mask', mask)# Put mask over top of the original image.result = cv2.bitwise_and(frame, frame, mask = mask)# Show final output imagecv2.imshow('colorTest', result)k = cv2.waitKey(5) & 0xFFif k == 27:break
cv2.destroyAllWindows()

总结:

迫于项目时间压力以及希望能对自己的学习能力有进一步的要求,我在尝试改变自己的学习方式,这编文章只是一个开始,并非本人完全原创在查找大量实例和技术理论后对各位前辈们的经验的一种自我总结。

参考文献:

[1]https://blog.csdn.net/qq_15947787/article/details/72784253 【opencv】目标识别——HSV颜色识别
[2]https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_gui/py_trackbar/py_trackbar.html
[3]https://blog.csdn.net/weixin_39490421/article/details/85998984 opencv3.1 提取图像中某一像素点的HSV值并判断颜色


http://chatgpt.dhexx.cn/article/WFlQynur.shtml

相关文章

OpenCV颜色识别

彩色模型 数字图像处理中常用的采用模型是RGB&#xff08;红&#xff0c;绿&#xff0c;蓝&#xff09;模型和HSV&#xff08;色调&#xff0c;饱和度&#xff0c;亮度&#xff09;&#xff0c;RGB广泛应用于彩色监视器和彩色视频摄像机&#xff0c;我们平时的图片一般都是RGB…

LabVIEW色彩匹配实现颜色识别、颜色检验(基础篇—13)

目录 1、颜色识别 2、颜色检验 色彩匹配&#xff08;Color Matching&#xff09;是将模板图像与待测图像或其中某一区域的颜色进行比较&#xff0c;判断它们是否相同或相近的过程。它可以用于颜色识别、颜色检验以及彩色对象定位等基于色彩信息比较的应用程序。 色彩匹配通常…

Python 对图片进行颜色识别

场景&#xff1a;在进行压力测试时&#xff0c;需要判断图片的某一块区域是否是黑色 这里使用的是OpenCV库对图片进行颜色的识别&#xff0c;几乎可以识别所有常见的颜色 直接上代码 import cv2 import numpy as np import collectionsclass colorList:def getColorList(sel…

OpenCV颜色识别(所有颜色均可识别)

OpenCV颜色识别实例&#xff08;所有颜色均可识别&#xff09; 欢迎访问我的博客sakuraの绘梨衣 本文中的颜色识别为红色&#xff0c;颜色阈值设置如下&#xff1a; lower_apple np.array([0, 100, 100]) higher_apple np.array([10, 200, 200])识别其他颜色可以参考HSV颜色…

如何实现视觉识别颜色

1. 功能说明 通过摄像头识别特定颜色&#xff08;红、绿、蓝&#xff09;。摄像头采集图像信息并通过WiFi将信息传递给PC端&#xff0c;然后PC端根据比例判断出目标颜色在色盘上的所属颜色后&#xff0c;指针便会指向对应颜色。 红、绿、蓝-色块 2. 电子硬件 本实验中采用了以下…

Halcon——颜色识别提取

文章目录 前言一、颜色识别原理二、颜色识别为什么将其转换至HSV颜色空间三、源代码写在最后 前言 【Halcon】颜色识别提取 这里以嘉庚建筑风格为例~ 一、颜色识别原理 载入图像后&#xff0c;将其转换至HSV颜色空间&#xff0c;通过判断每个像素是否在所选取的范围内&…

颜色识别、轮廓识别-树莓派 Opencv-基于Python学习记录DAY-4

学习颜色识别之前先介绍一下新认识的图像格式HSV&#xff1a; 色调H 用角度度量&#xff0c;取值范围为0&#xff5e;360&#xff0c;从红色开始按逆时针方向计算&#xff0c;红色为0&#xff0c;绿色为120,蓝色为240。它们的补色是&#xff1a;黄色为60&#xff0c;青色为18…

opencv--颜色识别

目录 一、主要函数介绍 二、颜色识别 三、其他相关函数介绍 1. cv2.resize 2. np.array(x,dtype) 3. cv2.inRange() 4. cv2.imshow() 5.cv2. waitKey() 四、掩膜 一、主要函数介绍 通常&#xff0c;相机在RGB颜色模式下工作&#xff0c;但这种模式受到光线的影响较大&am…

颜色识别OpenCV

下面有多种颜色识别方法&#xff0c;可根据需要进行选择 ①colorList.py&#xff08;颜色库&#xff09; import numpy as np import collectionsdef getColorList():dict collections.defaultdict(list)# blacklower_black np.array([0, 0, 0])upper_black np.array([180…

SPSSAU统计分析软件,一键输出三线表格式分析结果

SPSSAU最近和一位朋友聊天&#xff0c;她在写论文&#xff0c;说到自己用SPSS软件对问卷数据做统计分析&#xff0c;做完之后分析结果有了&#xff0c;拿给导师看&#xff0c;但她们导师说&#xff0c;论文中的表格必须是三线表格式&#xff0c;然后她就得要自己手动制作三线表…

SPSS软件的数据分析与GDP和人口老龄化的预测

目录 前言 问题二模型的建立与求解 1.2.1 ARIMA时间序列模型的建立与求解 平稳性检验 的时间序列预测模型的建立与求解 ​​​​​​​模型的检验 ​​​​​​​对于的时间序列预测模型的建立与求解 ​​​​​​​模型的检验 ​​​​​​​ 前言 SPSS软件的数据分析与GDP和…

数据分析与挖掘———SPSS Moderler

数据分析与挖掘———SPSS Moderler 一、Modeler给概述 1、SPSS Modeler基本认识 IBM SPSS Modeler是一组数据挖掘工具&#xff0c;通过这些工具可以采用商业技术快速建立预测性模型&#xff0c;并将其应用于商业活动&#xff0c;从而改进决策过程。 SPSS Modeler提供了各种…

用SPSS做数据分析(1)

写在前面: 爬虫今天停更一天,今天是周六,今天要把最近网课学习SPSS课程做个总结和回顾,明天继续更新爬虫的内容,今天这篇文章主要是SPSS中的数据管理,一些关于数据的简单操作,是属于SPSS中比较基础的内容,希望看完博客能动手亲自实践一下,会有奇效 文章目录 写在前面:SPSS数据…

利用SPSS做数据分析①(了解SPSS)

话不多说&#xff0c;上才艺&#xff0c;BGM&#xff0c;BGM&#xff0c;BGMBGM。。。哈哈哈哈 不闹了&#xff0c;接下来让我们一起认识一个非常好用的数据分析工具&#xff1a;SPSS 1、SPSS是什么&#xff1f; SPSS是广大统计爱好者和数据分析师最熟悉的名字&#xff0c;它…

如何用SPSS进行数据分析?

1.什么是SPSS SPSS是社会统计科学软件包的简称&#xff0c; 其官方全称为IBM SPSS Statistics。SPSS软件包最初由SPSS Inc.于1968年推出&#xff0c;于2009年被IBM收购&#xff0c;主要运用于各领域数据的管理和统计分析。作为世界社会科学数据分析的标准&#xff0c;SPSS操作…

数据分析5大软件大PK:Python、Excel、R、SAS、SPSS你最爱哪个?

转自 中国统计网 本文为转载分享&#xff0c;若侵权请联系后台删除 1 Excel Microsoft Excel是微软公司的办公软件Microsoft office的组件之一&#xff0c;是由Microsoft为Windows和Apple Macintosh操作系统的电脑而编写和运行的一款试算表软件。Excel 是微软办公套装软件的一个…

SPSS:数据分析

目录 1、数据采集 2、数据是否服从正态分布 3、T检验&#xff08;T Test&#xff09; 4、方差分析&#xff08;ANOVA&#xff09; 5、卡方检验&#xff08;Chi-square Test&#xff09; 6、灰色关联度分析&#xff08;Grey Relation Analysis&#xff0c;GRA&#xff09;…

[SPSS] SPSS统计分析软件简介

SPSS的英文缩写来源于以下两个 ① Statistical Package for Social Science(社会科学统计软件包) ② Statistical Product and Service Solutions(统计产品与服务解决方案) SPSS是一种专业的统计分析软件。为用户提供了直观的图形化菜单界面&#xff0c;用户的数据管理和统计…

SPSS软件介绍

SPSS软件界面描述 IBM SPSS是目前常用的一种统计分析软件&#xff0c;SPSS&#xff08;Statistical Product and Service Solutions&#xff09;是统计产品和服务解决方案软件&#xff0c;操作简单&#xff0c;无需写代码&#xff0c;只需确定要分析的数据及之间的因变、自变关…

数据分析软件及spss简单操作

数据分析软件介绍 SPSS统计软件 SPSS是英文Statistical package for the social science 的缩写&#xff0c;翻译成汉语是社会学统计程序包&#xff0c;20世纪60年代末由美国斯坦福大学的三位研究生研制&#xff0c;1975年在芝加哥组建SPSS总部。SPSS系统特点是操作比较方…