Mat input_image;
Mat output_mask;
Mat output_image; void main()
{
VideoCapture cam();
if (!cam.isOpened())
return; namedWindow("input image");
namedWindow("output mask");
namedWindow("output image");
//椭圆皮肤模型
Mat skinCrCbHist = Mat::zeros(Size(, ), CV_8UC1);
ellipse(skinCrCbHist, Point(, 155.6), Size(23.4, 15.2), 43.0, 0.0, 360.0, Scalar(, , ), -); while (true) {
cam >> input_image;
if (input_image.empty())
return; Mat ycrcb_image;
output_mask = Mat::zeros(input_image.size(), CV_8UC1);
cvtColor(input_image, ycrcb_image, CV_BGR2YCrCb); //首先转换成到YCrCb空间
for (int i = ; i < input_image.cols; i++) //利用椭圆皮肤模型进行皮肤检测
for (int j = ; j < input_image.rows; j++){
Vec3b ycrcb = ycrcb_image.at<Vec3b>(j, i);
if (skinCrCbHist.at<uchar>(ycrcb[], ycrcb[]) > )
output_mask.at<uchar>(j, i) = ;
}
input_image.copyTo(output_image, output_mask);
cv::erode(output_mask, output_mask, cv::Mat());
cv::erode(output_mask, output_mask, cv::Mat());
cv::erode(output_mask, output_mask, cv::Mat());
cv::erode(output_mask, output_mask, cv::Mat());
cv::dilate(output_mask, output_mask, cv::Mat());
imshow("input image", input_image);
imshow("output mask", output_mask);
imshow("output image", output_image);
output_image.setTo();
if ( == waitKey())
return;
}
return;
}

第二种:

Mat input_image;
Mat output_mask;
Mat output_image;
Mat mask;
void main()
{
VideoCapture cam();
if (!cam.isOpened())
return; ///椭圆皮肤模型
Mat skinCrCbHist = Mat::zeros(Size(, ), CV_8UC1);
ellipse(skinCrCbHist, Point(, 155.6), Size(23.4, 15.2), 43.0, 0.0, 360.0, Scalar(, , ), -); Mat element = getStructuringElement(MORPH_RECT, Size(, ), Point(-, -)); while (true)
{
cam >> input_image;
if (input_image.empty())
return; Mat ycrcb_image;
output_mask = Mat::zeros(input_image.size(), CV_8UC1);
cvtColor(input_image, ycrcb_image, CV_BGR2YCrCb); //首先转换成到YCrCb空间 for (int i = ; i < input_image.rows; i++) //利用椭圆皮肤模型进行皮肤检测
{
uchar* p = (uchar*)output_mask.ptr<uchar>(i);
Vec3b* ycrcb = (Vec3b*)ycrcb_image.ptr<Vec3b>(i);
for (int j = ; j < input_image.cols; j++)
{
if (skinCrCbHist.at<uchar>(ycrcb[j][], ycrcb[j][]) > )
p[j] = ;
}
} morphologyEx(output_mask, output_mask, MORPH_CLOSE, element); vector< vector<Point> > contours; // 轮廓
vector< vector<Point> > filterContours; // 筛选后的轮廓
vector< Vec4i > hierarchy; // 轮廓的结构信息
contours.clear();
hierarchy.clear();
filterContours.clear(); findContours(output_mask, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
// 去除伪轮廓
for (size_t i = ; i < contours.size(); i++)
{
if (fabs(contourArea(Mat(contours[i]))) > &&fabs(arcLength(Mat(contours[i]),true))<) //判断手进入区域的阈值
filterContours.push_back(contours[i]);
} output_mask.setTo();
drawContours(output_mask, filterContours, -, Scalar(, , ), CV_FILLED); //8, hierarchy); input_image.copyTo(output_image, output_mask);
imshow("input image", input_image);
imshow("output image", output_image); output_image.setTo();
if ( == waitKey())
return;
}
return;
}

OpenCv椭圆皮肤模型的更多相关文章

  1. OpenCV混合高斯模型函数注释说明

    OpenCV混合高斯模型函数注释说明 一.cvaux.h #define CV_BGFG_MOG_MAX_NGAUSSIANS 500 //高斯背景检测算法的默认参数设置 #define CV_BGF ...

  2. Opencv混合高斯模型前景分离

    #include "stdio.h" #include "string.h" #include "iostream" #include &q ...

  3. OpenCv:椭圆上点的计算方程

    椭圆         椭圆(Ellipse)是平面内到定点F1.F2的距离之和等于常数(大于|F1F2|)的动点P的轨迹,F1.F2称为椭圆的两个焦点.其数学表达式为:                 ...

  4. Opencv SkinOtsu皮肤检测

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

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

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

  6. OpenCV实时美颜摄像并生成H264视频流

    为什么美颜摄像这么简单的功能,OpenCV这个开源项目网上很少有代码呢?对于在windows平台下,生成h264视频流也比价麻烦,没有现成的api可以使用,需要借助MinGw编译libx264,或者f ...

  7. 使用VS+OpenCV调用深度学习模型

    最近项目有个任务,要在windows环境下用VS+OpenCV实现caffe模型的调用,于是在网上找了几个相关的博客跑了几个demo练练手.这些博客写得都很详细,但是有些细节由于版本更新的问题,配置的 ...

  8. HOG:从理论到OpenCV实践

    (转载请注明出处:http://blog.csdn.net/zhazhiqiang/ 未经允许请勿用于商业用途) 一.理论 1.HOG特征描述子的定义:     locally normalised ...

  9. Unity3d 屏幕空间人体皮肤知觉渲染&次表面散射Screen-Space Perceptual Rendering & Subsurface Scattering of Human Skin

    之前的人皮渲染相关 前篇1:unity3d Human skin real time rendering 真实模拟人皮实时渲染 前篇2:unity3d Human skin real time ren ...

随机推荐

  1. Javascript权威指南——第二章词法结构,第三章类型、值和变量,第四章表达式和运算符,第五章语句

    第二章 词法结构 一.HTML并不区分大小写(尽管XHTML区分大小写),而javascript区分大小写:在HTML中,这些标签和属性名可以使用大写也可以使用小写,而在javascript中必须小写 ...

  2. Spring MVC学习笔记——用户增删该查和服务器端验证

    建立一个动态web项目,起名为SpringMVC_crud 导包,其中包括jstl的一些包等 1.先写一个User.java,是用户类 文件User.java文件 package org.common ...

  3. BaKoMa Tex Word 的使用

    数学论文编排软件,付费,但是可以这么处理,安装好后不要马上打开,进入影子系统的时候再运行它,这样每次都是全新的, 优势是 WYSIWYG,所见即所得, 中文输入, \documentclass{art ...

  4. iOS直播点赞动画,iOS直播心型点赞动画

    https://github.com/songxing10000/LikeAnimation-PraiseAnimation

  5. Java面试笔记

    1.&和&& if(str != null& !str.equals("")){ System.out.println("ok" ...

  6. 使用idea开发Springmvc

    使用IntelliJ IDEA开发SpringMVC网站(一)开发环境 http://my.oschina.net/gaussik/blog/385697?fromerr=A4EKE0Ix idea1 ...

  7. mysql 如何用一条SQL将一张表里的数据插入到另一张表 3个例子

    1. 表结构完全一样 insert into 表1 select * from 表2  2. 表结构不一样(这种情况下得指定列名) insert into 表1 (列名1,列名2,列名3) selec ...

  8. python 运行时报错误SyntaxError: Non-ASCII character '\xe5' in file 1.py on line 2

    File "1.py", line 2SyntaxError: Non-ASCII character '\xe5' in file 1.py on line 2, but no ...

  9. Python画图笔记

    matplotlib的官方网址:http://matplotlib.org/ 问题 Python Matplotlib画图,在坐标轴.标题显示这五个字符 ⊥ + - ⊺ ⨁,并且保存后也能显示   h ...

  10. JAVA语言学习笔记(一)

    1 一切都是对象 JAVA中所有代码都必须写在类里面. 方法名和参数列表(它们合起来被称为"方法签名")唯一地标识出某个方法.联想多态. 基本数据类型的"局部变量&quo ...