颜色识别的原理

opencv中的颜色模型

RGB

RGB具有三个通道其,分别表示红色通道®,绿色通道(G),蓝色通道(B),3个通道在opencv中的取值均为0~255,它的颜色由3个通道的取值来共同决定,因此如果使用RGB图像来进行颜色的识别,会丢失很多的颜色。

HSV

HSV具有三个通道,其分别表示色调(H),饱和度(S),亮度(V),3个通道在opencv中的取值分别如下:

  • H:0~180
  • S:0~255
  • V:0~255
    其中H通道和S通道决定了颜色,V通道决定亮度
    各种颜色对应的三个通道的取值表如下:

因此通过限制HSV通道中相对应的数值,就可以识别出对应的颜色

颜色识别的实现(c++)

  1. 读取摄像头的实时画面

    VideoCapture capture(1);//0为电脑本身摄像头,1位外置摄像头
    
  2. 读取摄像头的当前一帧的数据并转换到HSV空间
    capture >> frame; //读取当前帧
    cvtColor(frame, imgHSV, COLOR_BGR2HSV);
    
  3. 对HSV图像进行直方图均衡化
    在此处使用直方图均衡化是因为可以使用这种方法可以使原来比较少像素的灰度会被分配到别的灰度去,像素相对集中, 处理后灰度范围变大,对比度变大,清晰度变大,所以能有效增强图像。

    split(imgHSV,temporary);
    equalizeHist(temporary[2], temporary[2]);
    merge(temporary, imgHSV);   //将HSV图像分割通道,并且做直方图的均衡化
    

    使用equalizeHist()函数,其输入必须是单通道的,因此使用split函数将得到的HSV图像分割为三个通道之后,在进行直方图均衡化,然后再使用merge函数来合并三个通道。
    此处仅对V通道进行了直方图均衡化,因为通过比对发现只对V通道进行效果最好,具体的原因还不清楚。

  4. 将直方图均衡化之后,使用inRange()函数来进行图像的识别
    inRange(imgHSV, Scalar(H_W_L, S_W_L, V_W_L), Scalar(H_W_H, S_W_H, V_W_H), image);
    

    其中H_W_L,H_W_L, S_W_L, V_W_L. . . 等数值分别为前面表格对应的颜色值的最小值和最大值。
    此函数是将在范围内的像素值为255,其与为0,反映到图像上就是,选中的颜色为白色,其与的均为黑色。
    操作到此颜色可以进行识别,但是效果可能不会很好,因此可以再使用开操作来消除噪点,去掉小的干扰快,再使用闭操作来填充闭合区域。

  5. 开操作
    kernel = getStructuringElement(MORPH_RECT, Size(3, 3));//3*3的矩形卷积核,只要是奇数的都可以
    morphologyEx(image,image,2,kernel);
    
  6. 闭操作
    morphologyEx(image,image,3,kernel);
    

源代码

#include <opencv2\opencv.hpp>  using namespace cv;
using namespace std;int main()
{Mat frame,imgHSV,image,kernel;vector<Mat>temporary;int H_W_L = 0, H_W_H = 180;int S_W_L = 0, S_W_H = 30;int V_W_L = 221, V_W_H = 255;VideoCapture capture(1);//读取视摄像头实时画面数据,0默认是笔记本的摄像头;如果是外接摄像头,这里改为1while (true){capture >> frame; //读取当前帧if (!frame.empty()){          //判断输入的视频帧是否为空的cvtColor(frame, imgHSV, COLOR_BGR2HSV);//threshold(gray, two_value, 125, 255, THRESH_BINARY);//二值图像split(imgHSV,temporary);equalizeHist(temporary[2], temporary[2]);/*equalizeHist(temporary[1], temporary[1]);equalizeHist(temporary[0], temporary[0]);*/merge(temporary, imgHSV);   //将HSV图像分割通道,并且做直方图的均衡化inRange(imgHSV, Scalar(H_W_L, S_W_L, V_W_L), Scalar(H_W_H, S_W_H, V_W_H), image);kernel = getStructuringElement(MORPH_RECT, Size(3, 3));morphologyEx(image,image,2,kernel);morphologyEx(image,image,3,kernel);imshow("直方图", imgHSV);imshow("原图",frame);imshow("window", image);  //在window窗口显示frame摄像头数据画面}if (waitKey(20) == 'q')   //延时20ms,获取用户是否按键的情况,如果按下q,会推出程序 break;}capture.release();     //释放摄像头资源destroyAllWindows();   //释放全部窗口return 0;
}

##结果

视频中的颜色识别——opencv实现相关推荐

  1. python红色的颜色表达式_50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)...

    目前计算机视觉(CV)与自然语言处理(NLP)及语音识别并列为人工智能三大热点方向,而计算机视觉中的对象检测(objectdetection)应用非常广泛,比如自动驾驶.视频监控.工业质检.医疗诊断等 ...

  2. 50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)

    目前计算机视觉(CV)与自然语言处理(NLP)及语音识别并列为人工智能三大热点方向,而计算机视觉中的对象检测(objectdetection)应用非常广泛,比如自动驾驶.视频监控.工业质检.医疗诊断等 ...

  3. Python+OpenCV教程5:颜色空间转换 追踪视频中特定颜色的物体 消除票据中的红色印章

    目标 颜色空间转换,如BGR↔Gray,BGR↔HSV等 追踪视频中特定颜色的物体 OpenCV函数:cv2.cvtColor(),cv2.inRange() 消除票据中的红色印章 教程 颜色空间转换 ...

  4. Python 计算机视觉(十六)—— 图像和视频中的人脸识别

    参考的一些文章以及论文我都会给大家分享出来 -- 链接就贴在原文,论文我上传到资源中去,大家可以免费下载学习,如果当天资源区找不到论文,那就等等,可能正在审核,审核完后就可以下载了.大家一起学习,一起 ...

  5. 基于BP神经网络+HOG特征提取的视频中车辆车牌识别算法仿真

    步骤一:定位和跟踪 这里,没有直接采用之前的方案,是因为在设计的时候,发现直接采用颜色等直接特征提取然后进行二值化处理的方法,如果视频中出现颜色类似的区域,则很有可能错误的定位,例如在公交车中车牌区域 ...

  6. 颜色识别opencv+trackbar调节目标颜色hsv的阈值

    颜色识别opencv+trackbar调节目标颜色hsv的阈值 颜色识别,trackbar调节颜色阈值 #include <iostream> #include "opencv2 ...

  7. HyperLPR 对图片和视频中车牌的识别

    一.概要 在上一篇文章中,主要介绍了HyperLPR开源车牌识别系统的配置和使用(链接:https://blog.csdn.net/oJiWuXuan/article/details/10733266 ...

  8. 人脸识别(四)视频中的人物识别

    功能: 对视频中的演员进行识别标注 需要先建立演员的人脸编码库,才能识别出来额 # 视频中的人脸标注 #合照中的人脸标注 import numpy as np import cv2 import fa ...

  9. android opencv颜色识别,opencv学习(2)-简单颜色识别并跟踪

    本次来我们用opencv来实现识别跟踪蓝色物体并返回位置坐标的功能. 该功能分为两部分,识别颜色,跟踪颜色. 要想实现颜色的识别,我们要打开摄像头,读取捕获的图像.将图像的颜色通道转化为HSV,设置选 ...

最新文章

  1. 【计算机网络】HTTP 与 HTTPS ( HTTP 发展过程 | HTTP/1.1 与 HTTP/2 对比 | HTTP 报文格式 )
  2. 去重是distinct还是group by?
  3. 【例题5-7 UVA - 136】Ugly Numbers
  4. 使用SAP Spartacus的route给标准页面维护alias入口
  5. uap连接oracle,UAP环境初始化操作手册Oralce版.pdf
  6. ASP.NET Core使用Nacos SDK访问阿里云ACM
  7. 前端学习(3210):react中类中方法的this指向二
  8. 方便好用的在线CPU性能调优工具--perf的常见用法
  9. 学英语三个月超过你过去学三年
  10. 标准盒模型与IE盒模型的区别
  11. Wireless Communications - 2.4 Ray Tracing
  12. 【附源码】Python计算机毕业设计企业合同管理系统
  13. because it violates the following Content Security Policy directive: “default-src ‘none‘“
  14. 使用微信小程序editor富文本编辑器(爬坑要点)
  15. Ubuntu 查看Nvidia显卡驱动信息
  16. Mysql -- 管理工具
  17. 买股票也要会买跌,股票不是只有涨的时候才能买的
  18. R中的NA与NULL值
  19. 介绍 7 款神秘的开源中间件!
  20. 一段修成正果的校园爱情

热门文章

  1. 再见,2019!你好,2020!
  2. Git的Fast Forward和no fast foward合并模式对比
  3. io流的文件读取和写入
  4. Matlab 定义函数的几种方法
  5. 58元/月,支付宝的付费选股指标「神奇九转」有用吗?
  6. C++时间函数----time
  7. kbengine配置mysql_KBEngine如何配置
  8. ros2与turtlebot3仿真教程-turtlebot3遥控
  9. 牛顿迭代法计算整数除法
  10. iOS 之文件管理器