OpenCV颜色识别

article/2025/8/26 19:29:49

彩色模型

数字图像处理中常用的采用模型是RGB(红,绿,蓝)模型和HSV(色调,饱和度,亮度),RGB广泛应用于彩色监视器和彩色视频摄像机,我们平时的图片一般都是RGB模型。而HSV模型更符合人描述和解释颜色的方式,HSV的彩色描述对人来说是自然且非常直观的。

HSV模型

HSV模型中颜色的参数分别是:色调(H:hue),饱和度(S:saturation),亮度(V:value)。由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。

  • 色调(H:hue):用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°;
  • 饱和度(S:saturation):取值范围为0.0~1.0,值越大,颜色越饱和。
  • 亮度(V:value):取值范围为0(黑色)~255(白色)。

RGB转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

OpenCV实现

首先我们读取一张图片或从视频读取一帧图像,用下面的函数转为HSV模型。

cvtColor(imgOriginal, imgHSV, COLOR_BGR2HSV);

然后我们对彩色图像做直方图均衡化

//因为我们读取的是彩色图,直方图均衡化需要在HSV空间做split(imgHSV, hsvSplit);equalizeHist(hsvSplit[2],hsvSplit[2]);merge(hsvSplit,imgHSV);

接着就是进行颜色检测,我们用void inRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst);函数进行颜色检测,这个函数的作用就是检测src图像的每一个像素是不是在lowerb和upperb之间,如果是,这个像素就设置为255,并保存在dst图像中,否则为0。

inRange(imgHSV, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), imgThresholded); //Threshold the image

通过上面的函数我们就可以得到目标颜色的二值图像,接着我们先对二值图像进行开操作,删除一些零零星星的噪点,再使用闭操作,连接一些连通域,也就是删除一些目标区域的白色的洞。

//开操作 (去除一些噪点)Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));morphologyEx(imgThresholded, imgThresholded, MORPH_OPEN, element);//闭操作 (连接一些连通域)morphologyEx(imgThresholded, imgThresholded, MORPH_CLOSE, element);

整个代码实现

#include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"using namespace cv;
using namespace std;int main( int argc, char** argv ){VideoCapture cap(0); //capture the video from web camif ( !cap.isOpened() )  // if not success, exit program{cout << "Cannot open the web cam" << endl;return -1;}namedWindow("Control", CV_WINDOW_AUTOSIZE); //create a window called "Control"int iLowH = 100;int iHighH = 140;int iLowS = 90; int iHighS = 255;int iLowV = 90;int iHighV = 255;//Create trackbars in "Control" windowcvCreateTrackbar("LowH", "Control", &iLowH, 179); //Hue (0 - 179)cvCreateTrackbar("HighH", "Control", &iHighH, 179);cvCreateTrackbar("LowS", "Control", &iLowS, 255); //Saturation (0 - 255)cvCreateTrackbar("HighS", "Control", &iHighS, 255);cvCreateTrackbar("LowV", "Control", &iLowV, 255); //Value (0 - 255)cvCreateTrackbar("HighV", "Control", &iHighV, 255);while (true){Mat imgOriginal;bool bSuccess = cap.read(imgOriginal); // read a new frame from videoif (!bSuccess) //if not success, break loop{cout << "Cannot read a frame from video stream" << endl;break;}Mat imgHSV;vector<Mat> hsvSplit;cvtColor(imgOriginal, imgHSV, COLOR_BGR2HSV); //Convert the captured frame from BGR to HSV//因为我们读取的是彩色图,直方图均衡化需要在HSV空间做split(imgHSV, hsvSplit);equalizeHist(hsvSplit[2],hsvSplit[2]);merge(hsvSplit,imgHSV);Mat imgThresholded;inRange(imgHSV, Scalar(iLowH, iLowS, iLowV), Scalar(iHighH, iHighS, iHighV), imgThresholded); //Threshold the image//开操作 (去除一些噪点)Mat element = getStructuringElement(MORPH_RECT, Size(5, 5));morphologyEx(imgThresholded, imgThresholded, MORPH_OPEN, element);//闭操作 (连接一些连通域)morphologyEx(imgThresholded, imgThresholded, MORPH_CLOSE, element);imshow("Thresholded Image", imgThresholded); //show the thresholded imageimshow("Original", imgOriginal); //show the original imagechar key = (char) waitKey(300);if(key == 27)break;}return 0;}

实验结果图: 

这里写图片描述

颜色识别的应用

经典的颜色识别的经典应用就是车牌定位了,因为中国的车牌无非就是蓝色和黄色,还有就是交通标志定位也是个应用。比如下面两张图片,有很明显的颜色区分。 
这里写图片描述 
这里写图片描述


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

相关文章

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系统特点是操作比较方…

SPSS数据分析全套教程(1)——SPSS概览

SPSS数据分析全套教程&#xff08;1&#xff09;——SPSS概览 什么是SPSS&#xff1f; 社会科学统计软件包&#xff08;Statistical Package for the Social Science&#xff0c;SPSS&#xff09;是世界著名的统计分析软件之一。 经近40年的发展&#xff0c;在全球已拥有大量…