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. nodejs fs module

    fs.watchFile(filename[, options], listener)# Added in: v0.1.31 filename <String> | <Buffer& ...

  2. c++编译错误提示及解决

    IntelliSense: #error 指令: Please use the /MD switch for _AFXDLL builds 修改设置:工程(Project)-> 属性(Prope ...

  3. HTML学习笔记——CSS初涉

    1>嵌入式css写法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  4. DOCKER windows安装

    DOCKER windows安装 1.下载程序包 2. 设置环境变量 3. 启动DOCKERT 4. 分析start.sh 5. 利用SSH工具管理 6. 下载镜像 6.1 下载地址 6.2 用FTP ...

  5. haproxy安装

    最近一直在整理之前用过的东西,现在到haproxy了,安装如下: tar xf haproxy-1.4.27.tar.gz cd haproxy-1.4.27 make TARGET=linux26 ...

  6. JS中两个重要的方法 call & apply 学习

    正题: Function.prototype.apply(instance,args)  //args 数组 Function.prototype.Call(instance,a1,a2)  //a1 ...

  7. ecshop 后台模板设置-》设置模板

    ecshop后台“设置模板”出现问题 问题1:不能出现特殊符号  / <!-- TemplateBeginEditable name="5F生活数码/手机" -->&l ...

  8. Shader_2[杂]

    三个shader,平滑滤波.锐化滤波和高斯模糊 http://tieba.baidu.com/p/3791791688 Unity3D研究院之自制批量修改Shader插件(五十七) http://ww ...

  9. 使用wp_editor函数实现可视化编辑器

    在最近的wp项目中遇到了需要使用可视化编辑器来接收用户的输入,正好就研究了一下wp_editor这个函数的用法,利用这个函数能很方便的把textarea文本域变成可视化编辑器. Wp_editor函数 ...

  10. ASP.NET WebAPI 08 Message,HttpConfiguration,DependencyResolver

    ASP.NET WebAPI 08 Message,HttpConfiguration,DependencyResolver   Message WebAPI作为通信架构必定包含包含请求与响应两个方法 ...