在对特定物体做初步检测时,颜色信息非常有用。例如辅助驾驶程序中的路标检测功能,就要凭借标准路标的颜色快速识别可能是路标的信息。另一个例子是肤色检测,检测到的皮肤区域可作为图像中有人存在的标志。手势识别就经常使用肤色检测确定手的位置。
通常来说,为了用颜色来检测目标,首先需要收集一个存储有大量图像样本的数据库,每个样本包含从不同观察条件下捕捉到的目标,作为定义分类器的参数。你还需要选择一种用于分类的颜色表示法。肤色检测领域的大量研究已经表明,来自不同人种的人群的皮肤颜色,可以在色调-饱和度色彩空间中很好地归类。因此,在后面的图像中,我们将只使用色调和饱和度值来识别肤色。
我们定义了一个基于数值区间(最小和最大色调、最小和最大饱和度)的函数,把图像中的像素分为皮肤和非皮肤两类:

void detectHScolor(const cv::Mat& image, // 输入图像double minHue, double maxHue, // 色调区间double minSat, double maxSat, // 饱和度区间cv::Mat& mask) { // 输出掩码// 转换到 HSV 空间cv::Mat hsv; cv::cvtColor(image, hsv, CV_BGR2HSV); // 将 3 个通道分割到 3 幅图像std::vector<cv::Mat> channels; cv::split(hsv, channels); // channels[0]是色调// channels[1]是饱和度// channels[2]是亮度// 色调掩码cv::Mat mask1; // 小于 maxHue cv::threshold(channels[0], mask1, maxHue, 255, cv::THRESH_BINARY_INV); cv::Mat mask2; // 大于 minHue cv::threshold(channels[0], mask2, minHue, 255, cv::THRESH_BINARY); cv::Mat hueMask; // 色调掩码if (minHue < maxHue) hueMask = mask1 & mask2; else // 如果区间穿越 0 度中轴线hueMask = mask1 | mask2; // 饱和度掩码// 从 minSat 到 maxSat cv::Mat satMask; // 饱和度掩码cv::inRange(channels[1], minSat, maxSat, satMask); // 组合掩码mask = hueMask & satMask;
}

如果在处理时有了大量的皮肤(以及非皮肤)样本,我们就可以使用概率方法估算在皮肤样本中和非皮肤样本中发现指定颜色的可能性。此处,我们依据经验定义了一个合理的色调-饱和度区间,用于这里的测试图像(记住,8 位版本的色调在 0~180,饱和度在 0~255):

// 检测肤色
cv::Mat mask;
detectHScolor(image, 160, 10, // 色调为 320 度~20 度25, 166, // 饱和度为~0.1~0.65 mask);
// 显示使用掩码后的图像
cv::Mat detected(image.size(), CV_8UC3, cv::Scalar(0, 0, 0));
image.copyTo(detected, mask);

颜色用于检测:肤色检测相关推荐

  1. 计算机视觉之利用颜色进行肤色检测(基于OpenCV自带库函数)

    概述: 在对待物体做初步检测时,颜色信息非常有用.比如说辅助驾驶程序中的路标检测功能,就要凭借标准路标的颜色快速识别可能是路标信息.另一个例子是肤色检测,检测到的皮肤区域可以作为图像中有人存在的标志. ...

  2. Opencv之人脸肤色检测总结

    1.RGB颜色空间肤色检测 在human skin color clustering for face detection一文中提出如下判别算式: opencv代码非常简单: void SkinRGB ...

  3. opencv图像处理学习(六十八)——肤色检测

    参考链接:https://blog.csdn.net/qq_22527639/article/details/81501565. 1.肤色检测   肤色检测技术利用了计算机对人体皮肤像素的分析过程,随 ...

  4. VS+OpenCV 处理图像的颜色(下)用色调、饱和度和亮度表示颜色、肤色检测

    [实现] #include<opencv2/core.hpp> #include<opencv2/highgui.hpp> #include<opencv2/imgpro ...

  5. python颜色识别_Python人体肤色检测

    Python人体肤色检测 概述 本文中的人体肤色检测功能采用 OpenCV 库实现, OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Andro ...

  6. OpenCV_颜色检测实现肤色检测(类处理彩色图像进阶)

    OpenCV描述直觉色彩空间有HSV和HLS两种色彩空间,它们的转换公式略有不同,但是结果非常类似. 在HSV中, 亮度被定义为三个RGB成分中的最大值.为了让定义更符合人类视觉系统,应该是用L*a* ...

  7. 100 行 Python 代码实现人体肤色检测

    作者: WHJWNAVY http://www.demodashi.com/demo/12967.html 概述 本文中的人体肤色 检测功能采用 OpenCV 库实现.OpenCV是一个基于BSD许可 ...

  8. OpenCV实战之人脸美颜美型(四)——肤色检测

    前言 肤色检测技术在人脸检测与识别.视频监控系统.裸图像检测.基于内容的图像检索.手势识别.肤色病学诊断.驾驶员疲劳检测.人机交互等领域有着广泛的应用,近年来得到了广泛的关注和研究. 针对美颜美型应用 ...

  9. OpenCV编程-肤色检测

    最近搞色彩认知计算,对于肤色检测也是兴趣使然. 我们在处理图像时,首先考虑的就是去噪,但是去噪不仅是去掉噪声,也需要考虑光照对图像造成的噪声,所以如果硬件跟得上的话,可以引入颜色恒常性计算来去噪,之后 ...

最新文章

  1. 机器学习算法加强——决策树和随机森林实践
  2. ChinaDNS 结合DNSMasq防dns挟持
  3. spring定时器总结
  4. (Head First 设计模式)学习笔记(1)
  5. Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version.
  6. qt中QMultiMap获取键值
  7. Lucene系列-分析器
  8. bxl类型封装转换为AD库封装
  9. 实部和虚部高斯变量瑞利衰落matlab,瑞利信道仿真
  10. Python 数据结构之二叉树的实现
  11. 【STM32】STM32控制继电器实现电动推杆的伸缩
  12. 机器学习------结构因果机制(SCM)、因果关系、因果推断
  13. Wed Nov 25 11:02:17 GMT+08:00 2020 WARN: Establishing SSL connection without server‘s identity verif
  14. 一台计算机的屏幕面积是多少,一台电脑屏幕的面积约是12多少平方面积单?
  15. oracle数据库常用操作
  16. 千兆级LTE时代的重要技术——免许可频谱与小型基站深入解析
  17. STM32单片机使用ADC功能驱动手指检测心跳模块
  18. mysql connector安装教程_Debezium:mysql connector安装
  19. spark读取文件夹数据
  20. 计算机课拔线头检讨书,实验室检讨书.doc

热门文章

  1. 汽车行业大数据应用的五大方向
  2. 【UEFI基础】UEFI事件介绍
  3. 计算机组成英语阅读,计算机英语阅读理解.docx
  4. js判断是否获得焦点
  5. 4G通信的网络结构与技术分析
  6. 基于 Kubernetes 的 Jenkins 主从通信异常解决
  7. 中医药人工智能-知识图谱-开发设计案例
  8. 齿轮系统动力学方程推导
  9. 基于ssm游戏论坛平台源码
  10. SAP MM内向交货单的凭证流