HSV皮肤检测

// 进行肤色检测
void SkinDetect(IplImage* src, IplImage* dst)
{
// 创建图像头
IplImage* hsv = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );//用于存图像的一个中间变量,是用来分通道用的,分成hsv通道
IplImage* tmpH1 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );//通道的中间变量,用于肤色检测的中间变量
IplImage* tmpS1 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* tmpH2 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* tmpS3 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* tmpH3 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* tmpS2 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* H = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* S = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, );
IplImage* V = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, ); IplImage* src_tmp1 = cvCreateImage(cvGetSize(src), , ); // 高斯模糊
cvSmooth(src, src_tmp1, CV_GAUSSIAN, , ); //高斯模糊 // hue色度,saturation饱和度,value纯度
cvCvtColor(src_tmp1, hsv, CV_BGR2HSV);//颜色转换
cvSplit(hsv, H, S, V, );//分为3个通道 cvInRangeS(H, cvScalar(0.0, 0.0, , ), cvScalar(20.0, 0.0, , ), tmpH1);
cvInRangeS(S, cvScalar(75.0, 0.0, , ), cvScalar(200.0, 0.0, , ), tmpS1);
cvAnd(tmpH1, tmpS1, tmpH1, ); // Red Hue with Low Saturation
// Hue 0 to 26 degree and Sat 20 to 90
cvInRangeS(H, cvScalar(0.0, 0.0, , ), cvScalar(13.0, 0.0, , ), tmpH2);
cvInRangeS(S, cvScalar(20.0, 0.0, , ), cvScalar(90.0, 0.0, , ), tmpS2);
cvAnd(tmpH2, tmpS2, tmpH2, ); // Red Hue to Pink with Low Saturation
// Hue 340 to 360 degree and Sat 15 to 90
cvInRangeS(H, cvScalar(170.0, 0.0, , ), cvScalar(180.0, 0.0, , ), tmpH3);
cvInRangeS(S, cvScalar(15.0, 0.0, , ), cvScalar(., 0.0, , ), tmpS3);
cvAnd(tmpH3, tmpS3, tmpH3, ); // Combine the Hue and Sat detections
cvOr(tmpH3, tmpH2, tmpH2, );
cvOr(tmpH1, tmpH2, tmpH1, ); cvCopy(tmpH1, dst); cvReleaseImage(&hsv);
cvReleaseImage(&tmpH1);
cvReleaseImage(&tmpS1);
cvReleaseImage(&tmpH2);
cvReleaseImage(&tmpS2);
cvReleaseImage(&tmpH3);
cvReleaseImage(&tmpS3);
cvReleaseImage(&H);
cvReleaseImage(&S);
cvReleaseImage(&V);
cvReleaseImage(&src_tmp1);
} int main(int argc, char* argv[])
{
/*
IplImage *src = cvLoadImage("C:\\C_C++ code\\Photo and video\\text009.jpg", CV_LOAD_IMAGE_COLOR);
//
cvNamedWindow("src", CV_WINDOW_AUTOSIZE);
cvShowImage("src", src);
// cvNamedWindow("flip", CV_WINDOW_AUTOSIZE);
IplImage *dsc = cvCreateImage(cvGetSize(src), src->depth, 1); // 以x轴翻转
SkinDetect(src, dsc);
// cvFlip(src, dsc, 1);
cvShowImage("flip", dsc);
cvWaitKey(0);
cvDestroyAllWindows();
cvReleaseImage(&src);
printf("Hello World!\n"); */
VideoCapture video();
IplImage *src, *dst;
Mat img,bigimg;
double scalar = ;
video >> img;
src = &(IplImage(img));
dst = cvCreateImage(cvGetSize(src), , );
while ()
{
video >> img;
src = &(IplImage(img));
SkinDetect(src, dst);
img = cvarrToMat(dst);
//腐蚀与膨胀 erode(img, img, Mat());
erode(img, img, Mat());
//erode(img, img, Mat()); dilate(img, img, Mat());
dilate(img, img, Mat());
dilate(img, img, Mat()); dilate(img, img, Mat());
dilate(img, img, Mat());
resize(img, bigimg, Size(img.cols*scalar, img.rows*scalar), , , );
imshow("x", bigimg);
if (waitKey() > )
break;
}
waitKey();
return ;
}

OpenCv皮肤检测-HSV分离的更多相关文章

  1. OpenCV探索之路(二十七):皮肤检测技术

    好久没写博客了,因为最近都忙着赶项目和打比赛==| 好吧,今天我打算写一篇关于使用opencv做皮肤检测的技术总结.那首先列一些现在主流的皮肤检测的方法都有哪些: RGB color space Yc ...

  2. OpenCV颜色转换和皮肤检测

    本笔记重点记录OpenCV中的颜色转换和利用色彩空间的特性进行皮肤检测 颜色转换 实现原理 之所以要引入色调/饱和度/亮度的色彩空间概念,是因为人们喜欢凭直觉分辨各种颜色,而它与这种方式吻合.实际上, ...

  3. OpenCV——肤色检测

    一.RGB color space 检测代码如下: void SkinRGB(IplImage* src,IplImage* dst) { //RGB颜色空间 //均匀照明:R>95,G> ...

  4. keras系列︱人脸表情分类与识别:opencv人脸检测+Keras情绪分类(四)

    引自:http://blog.csdn.net/sinat_26917383/article/details/72885715 人脸识别热门,表情识别更加.但是表情识别很难,因为人脸的微表情很多,本节 ...

  5. opencv直线检测在c#、Android和ios下的实现方法

    opencv直线检测在c#.Android和ios下的实现方法 本文为作者原创,未经允许,不得转载 :原文由作者发表在博客园:http://www.cnblogs.com/panxiaochun/p/ ...

  6. OPENCV条形码检测与识别

    条形码是当前超市和部分工厂使用比较普遍的物品,产品标识技术,使用摄像头检测一张图片的条形码包含有两个步骤,第一是定位条形码的位置,定位之后剪切出条形码,并且识别出条形码对应的字符串,然后就可以调用网络 ...

  7. OpenCV矩形检测

    OpenCV矩形检测 需求:提取图像中的矩形,图像存在污染现象,即矩形区域不是完全规则的矩形. 思路一:轮廓法 OpenCV里提取目标轮廓的函数是findContours,它的输入图像是一幅二值图像, ...

  8. OpenCV绘制检测结果

    OpenCV绘制检测结果 opencv  rtcp  timestamp  一.介绍 由于在验证阶段,使用FPGA时我们的算法检测速度很慢,没法直接在主流上进行绘图,否则的话,主流就要等待算法很久才能 ...

  9. Opencv SkinOtsu皮肤检测

    void SkinRGB(IplImage* rgb, IplImage* _dst) { assert(rgb->nChannels == && _dst->nChann ...

随机推荐

  1. electron打包

    1.全局安装electron-packager npm install -g electron-packager 2.在项目目录下执行命令 electron-packager ./ --platfor ...

  2. JavaWeb学习笔记——XML解析

    DOM解析操作 只在跟节点<addresslist>下面建立一个子节点<name> <?xml version="1.0" encoding=&quo ...

  3. [Redis]如何通过Powershell创建Redis服务

    目前Redis在中国上线了,不过只是预览版而且不能通过Portal进行操作,不过可以通过Powershell创建,具体如下: 下载最新的Powershell SDK:http://www.window ...

  4. Marshal

    https://msdn.microsoft.com/en-us/library/aa288468(v=vs.71).aspx http://tomosoft.jp/design/?p=4647 ht ...

  5. owin

    app.Properties["Hello"] = System.DateTime.Now; app.Run(async context => await context.R ...

  6. Python开发【第十九篇】:Python操作MySQL

    本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...

  7. xStream完美转换XML、JSON

    xStream框架 xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换: 前面有介绍过json-lib这个框架,在线博文:htt ...

  8. python中raw_input() 与 input()

    参考网址:http://www.cnblogs.com/way_testlife/archive/2011/03/29/1999283.html 在python中如何接收一个输入的字符串. 举个例子: ...

  9. 看开源代码利器—用Graphviz + CodeViz生成C/C++函数调用图(call graph)

    一.Graphviz + CodeViz简单介绍 CodeViz是<Understanding The Linux Virtual Memory Manager>的作者 Mel Gorma ...

  10. EF方便的添加一条信息...

    //刚开始通过EF添加数据都是这样的...↓ var db = new DBEntities() T_User t_userinfo = new T_User() { Type = "typ ...