目录

一、什么是颜色检测

颜色检测步骤

二、HSV图像类型介绍

选择HSV进行颜色检测的原因

三、实例

1.RGB转HSV

2. 定义蒙版

3. 定义上下限

4.颜色检测,得到二值图像,并输出至蒙版

5.番外:转换为实时跟踪检测,可调模式

5.1 创建跟踪栏窗口

5.2  创建跟踪栏

5.3 写while循环

效果


一、什么是颜色检测

颜色检测就是对目标图像的所有像素点进行筛选,将符合指标的像素设置为白色,不符合指标的像素设置为黑色。

指标由上界和下界组成。

比如,我们要检测下面这一张图片:

我们准备检测黑色,也就是图中的杯子,以及猫的耳朵内部也有一点黑色部分,当然还有右边的墙角。

那么经过颜色检测后,我们能得到这样一张图:

这就是颜色检测的作用。

颜色检测步骤

1.将需要检测的RGB图像转换成HSV图像

2.定义Mat类型的一个对象:蒙版mask

3.定义颜色上下限

其中上限是一个Scalar对象,包含三个值:hmin,smin,vmin,表示hsv三个要素的最小值;

而下限也是一个Scalar对象,包含三个值:hmax,smax,vmax,表示hsv三个要素的最大值。

4.使用inRange函数,检测src图像的每一个像素是不是在lowerb和upperb之间

如果是,这个像素就设置为255,并保存在mask图像中,否则为0。

二、HSV图像类型介绍

HSV是相对RGB的另一种颜色表示方式,它相对RGB而言,是一种比较直观的颜色模型。其中颜色的参数分别是:色调(H),饱和度(S),明度(V)。

色调H:
用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;

饱和度S:
饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

明度V:
明度表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关,光照对此值影响最大。通常取值范围为0%(黑)到100%(白)。

一般对颜色空间的图像进行有效处理都是在HSV空间进行的,然后对于基本色中对应的HSV分量需要给定一个严格的范围,下面是通过实验计算的模糊范围(准确的范围在网上都没有给出)。

H:  0— 180

S:  0— 255

V:  0— 255

此处把部分红色归为紫色范围:

选择HSV进行颜色检测的原因

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

相对于RGB空间,HSV空间能够非常直观的表达色彩的明暗,色调,以及鲜艳程度,方便进行颜色之间的对比。

所以我们在颜色检测时,选用HSV图像。

下图为RGB VS HSV

三、实例

要检测的原图:

1.RGB转HSV

    //定义图片路径string path = "Resources/lambo.png";Mat img = imread(path);//定义HSV类型图片Mat imgHSV;//转换cvtColor(img, imgHSV, COLOR_BGR2HSV);

2. 定义蒙版

 //定义蒙版Mat mask;

3. 定义上下限

        //定义颜色上下限Scalar lower(hmin, smin, vmin);Scalar upper(hmax, smax, vmax);

4.颜色检测,得到二值图像,并输出至蒙版

     //收集颜色//定义颜色上下限int hmin = 0, smin = 110, vmin = 153;int hmax = 19, smax = 240, vmax = 255;Scalar lower(hmin, smin, vmin);Scalar upper(hmax, smax, vmax);//输出的是遮罩,蒙版inRange(imgHSV, lower, upper, mask);

这里我们检测的是橙色,上述hsv的上下限就是橙色的对应上下限。

效果如下: 

5.番外:转换为实时跟踪检测,可调模式

5.1 创建跟踪栏窗口

 //创建跟踪栏窗口namedWindow("Trackbars", (640, 200));

5.2  创建跟踪栏

    //创建跟踪栏createTrackbar("Hue Min", "Trackbars", &hmin, 179);createTrackbar("Hue Max", "Trackbars", &hmax, 179);createTrackbar("Sat Min", "Trackbars", &smin, 255);createTrackbar("Sat Max", "Trackbars", &smax, 255);createTrackbar("Val Min", "Trackbars", &vmin, 255);createTrackbar("Val Max", "Trackbars", &vmax, 255);

5.3 写while循环

while (1){//收集颜色//定义颜色上下限Scalar lower(hmin, smin, vmin);Scalar upper(hmax, smax, vmax);//输出的是遮罩,蒙版inRange(imgHSV, lower, upper, mask);//展示imshow("Image", img);imshow("ImageHSV", imgHSV);imshow("ImageMask", mask);waitKey(1);}

这里要注意,和网络摄像头一样,我们需要设置waitKey为1毫秒。 

效果

计算机视觉 OpenCV【六:应用之颜色检测】相关推荐

  1. 使用 OpenCV 进行实时对象颜色检测

    在本文中,我们将讨论如何使用 python 和 OpenCV 检测单色对象.单色是指单一波长的光.我们将使用使用网络摄像头捕获的视频作为输入,并尝试检测单一颜色的对象,尤其是蓝色.但是,如果您正确设置 ...

  2. 3h精通OpenCV(七)-颜色检测

    0.准备工作 右击新建的项目,选择Python File,新建一个Python文件,然后在开头import cv2导入cv2库,import numpy并且重命名为np. import cv2 imp ...

  3. OpenCV - C++实战(05) — 颜色检测

    目录 第5章  颜色检测 5.1 实现原理 5.2 Lab颜色模型 5.3 cv :: threshold() 阈值函数 5.4 计算图像之间的距离 5.4.1 公式计算 5.4.2 cv::absd ...

  4. 【Opencv图像处理】BGB转HSV与颜色检测

    BGB转HSV与颜色检测 什么是HSV色彩空间? Opencv代码 静态图片颜色检测 结果展示 视频颜色检测 结果展示 什么是HSV色彩空间? HSV(色相.饱和度.值,也称为 HSB [色相.饱和度 ...

  5. OpenCV计算机视觉编程攻略之行人检测

    OpenCV计算机视觉编程攻略之行人检测,OpenCV 提供了一个基于HOG 和SVM且经过训练的行人检测器,可以用这个SVM 分类器以不同尺度的窗口扫描图像,在完整的图像中检测特定物体. 原图如下: ...

  6. OpenCV 颜色检测| color detection

    OpenCV 颜色检测 1.导入必要的包并初始化相机 import cv2 import numpy as np# Reading the image img = cv2.imread('test.j ...

  7. python颜色识别原理_python+opencv实现颜色检测、轮廓检测、颜色追踪

    准备工作 python配置numpy和openCv库 读取图像和视频图像cv2.imread(路径) cv2.imshow(窗口名称,输出对象) cv2.waitkey(等待时间)import cv2 ...

  8. 计算机视觉OpenCV红绿灯检测

    红绿灯检测 本设计中红绿灯检测程序主要有detectColor.py文件和TLState.py两个文件. 在detectColor.py文件中主要是检测被TLState.py分割出来的灯的颜色,首先利 ...

  9. 检测单击鼠标左键并拖动的消息_计算机视觉OpenCV学习笔记(四):关于鼠标的相关事件函数...

    (7)把鼠标当画笔 本篇目标: 学会使用OpenCV中的鼠标处理的相关事件,事件回调函数怎么去定义,参数有哪些,以及如何注册鼠标监听事件. 7.1 .1 回调函数的定义: 1 def name(eve ...

  10. Opencv从入门到精通(五):透视图、拼接图片、颜色检测

    文章目录 一.透视图 二.拼接图片 三.颜色检测 一.透视图 二.拼接图片 实际上操作的是像素点矩阵 import cv2 import numpy as npimg = cv2.imread('1. ...

最新文章

  1. CentOS 6.5 下Vim 配置图解
  2. .Net Framework 4.5.1 安装时遇到严重错误 问题的解决方法
  3. 转://使用insert插入大量数据的总结
  4. python 嵌套数组_兴趣是最好的老师,快速入门:十分钟学会python
  5. android打印intent flag,Android flag详解
  6. Xcode6 手动建empty application
  7. 【Elasticsearch】es Timelion是Kibana中时间序列的可视化工具
  8. 【java】深入探讨 Java 类加载器
  9. xlua build时 报错处理
  10. Mac 重装 Apache 后中文目录乱码
  11. hdu 1754 I hate it (线段树)
  12. 顶级域名、一级域名、二级域名、子页面
  13. [2019年国庆专题训练] dp专题训练
  14. golang 实现 syn_sent flood洪水攻击
  15. 腾讯云服务器从购买到搭建tomcat
  16. 大牛证券:涪陵榨菜Q2单季营收增速创近六年新低
  17. Redis保存购物车信息
  18. MATLAB通信工具箱仿真16QAM系统
  19. delphi多线程加锁
  20. 简述计算机监督分类的基本原理,(揽宇方圆)遥感图像的计算机分类方法包括监督分类和非监督分类...

热门文章

  1. JAVA WEB_HTML的初步(2)
  2. SumatraPDF的反向搜索
  3. spring cloud gateway转发服务报错。
  4. 【答粉丝问】桌面运维需要具备的技能有什么?
  5. 计算机工程制图箭头怎么画,cad中箭头画法
  6. SpringBoot入门(四)Service、Dao
  7. Linux 系统调用 fork wait exec
  8. 900万!!!!!!!!这也太强了吧!!!我的老天!!!!!!!!!!
  9. 重磅 | Stratifyd实力入选《2022中国数据智能产业图谱1.0》
  10. 迅捷路由器设置找不到服务器,迅捷(fast)路由器怎么设置?