OpenCV描述直觉色彩空间有HSV和HLS两种色彩空间,它们的转换公式略有不同,但是结果非常类似。

在HSV中,

亮度被定义为三个RGB成分中的最大值。为了让定义更符合人类视觉系统,应该是用L*a*b或L*u*v色彩空间的L通道

饱和度的计算公式为:

色调通常用0~360度来表示,红色是0度。

而HSB色彩空间通常用一个圆锥体来表示,圆锥体内部每个点代表一种特定的颜色。角度位置表示的是颜色的色调,到中轴线的距离表示饱和度,高度表示亮度。

肤色检测使用颜色信息进行j检测

为了让颜色来检测目标,首先需要收集一个存储有大量图像样本的数据库,每个样本中包含从不同观察条件下捕捉到的目标,作为定义分类器的参数。不同人中的肤色,可以在色调-饱和度色彩空间中很好地归类。

效果:

代码:

#include <iostream>
#include "opencv.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"       void detectHScolor(const cv::Mat& image, double minHue, double maxHue, double minSat, double maxSat, cv::Mat& mask)
{cv::Mat hsv;cv::cvtColor(image, hsv, CV_RGB2HSV);std::vector<cv::Mat> channels;cv::split(image, channels);//色调掩码cv::Mat mask1;cv::threshold(channels[0], mask1, maxHue, 255, cv::THRESH_BINARY_INV);cv::Mat mask2;cv::threshold(channels[0], mask2, minHue, 255, cv::THRESH_BINARY);cv::Mat hueMask;if (minHue < maxHue)hueMask = mask1&mask2;elsehueMask = mask1 | mask2;//饱和度掩码cv::threshold(channels[1], mask1, maxSat, 255, cv::THRESH_BINARY_INV);cv::threshold(channels[1], mask2, minSat, 255, cv::THRESH_BINARY);cv::Mat satMask;satMask = mask1&mask2;mask = hueMask&satMask;
}int main()
{cv::Mat image = cv::imread("girl.jpg");cv::imshow("原图", image);cv::Mat mask;detectHScolor(image, 130, 240, 100, 255, mask);cv::Mat detected(image.size(), CV_8UC3, cv::Scalar(0, 0, 0));image.copyTo(detected, mask);cv::imshow("肤色检测图", detected);cv::waitKey();
}

这里调色度和饱和度花了不少时间,思想是皮肤接近于白色,色度较高,饱和度也较高。

OpenCV_颜色检测实现肤色检测(类处理彩色图像进阶)相关推荐

  1. 颜色用于检测:肤色检测

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

  2. 人脸检测---基于肤色检测的实现

    在2015年本科毕业的时候,当时因为保送研究生的时候,选择了图像处理的研究方向,因此本科的毕业设计就选择了人脸检测的课题.人脸检测是一个研究得比较深入得一门方向了,对于人脸识别的重要性不言而喻,人脸都 ...

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

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

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

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

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

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

  6. 肤色检测一例-使用rgb颜色模型

    代码: /* 输入:rgb图像 输出:与输入图像尺寸相同的灰度图,若rgb图中某像素检测为肤色,则灰度图中对应像素为255,否则为0 */ void SkinRGB( Mat &rgb,Mat ...

  7. 简单的基于YCrCb颜色空间的人脸检测(肤色)

    简单的基于YCrCb颜色空间的人脸检测(肤色) 环境:Windows XP+MATLAB 2010b 基本思路: 1)将基于彩色空间的RGB模型转换为YCbCr模型(考虑到人脸的生理特征,只采取了Cr ...

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

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

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

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

最新文章

  1. 打开word出现“您正试图运行的函数包含有宏或需要宏语言支持的内容。”的解决方法
  2. 网络推广——网络推广专员从多角度分析网站关键词排名受影响因素
  3. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储...
  4. android bitmap 占用内存大小,drawable与bitmap内存占用大小
  5. TCExam开源在线考试系统
  6. 如何使用 SQL Server FILESTREAM 存储非结构化数据?这篇文章告诉你!
  7. 总奖金64万!含吸烟打电话检测、车道线识别等,2020中国华录杯·数据湖算法大赛火热进行中!...
  8. c++代码好玩_Python开源学习:60秒学会一个例子,147段简单代码助你从入门到大师 | 中文资源...
  9. Snmp网络协议及Java开发相关
  10. bootstrap4 图标和文字行内对齐
  11. grep -v xxx 用法
  12. html选项卡出现乱码,html乱码
  13. 【vue】bable的介绍以及编写vue文件
  14. IK 分词器空格支持
  15. 使用cairo和freetype进行字体布局和渲染
  16. android 设置画布颜色,android – 如何设置笔触颜色以在画布上绘制矩形?
  17. 【项目】数仓项目(三)
  18. 由mouseover和mouseenter引发的思考
  19. 脱裤子放屁之用两个栈实现队列、用两个队列实现栈
  20. Java企业级常见的设计模式

热门文章

  1. 写给小白,从零开始拥有一个酷炫上线的网站!
  2. 东莞理工学院计算机科学与技术考研,东莞理工学院2020年硕士研究生调剂信息公告(计算机科学与技术、资源与环境专业(原环境工程))...
  3. 混乱到清晰-重构之拆离
  4. GIT 技巧命令讲解笔记2020 (三)
  5. 乐鑫科技线上笔试什么内容_顺丰科技线上笔试
  6. 泛域名证书的域名缺少中间证书处理方法
  7. 用Python一秒自动美化表格|python的1024种玩法(3)
  8. 虚拟机使用主机代理(kali v2ray)
  9. 【SemiDrive源码分析】【MailBox核间通信】46 - Android侧 RPMSG_IPCC_RPC驱动分析(下) 之 RPMSG_IPCC_RPC驱动初始化、数据收发流程分析
  10. C# ASP.net MVC框架