opencv椭圆肤色模型人脸检测
2017-03-15 11:56
489 查看
void
该函数是用来在指定图片上绘制椭圆弧线的。 参数image为需要绘制椭圆的图像; 参数center是该椭圆的中心点坐标; 参数axes是该椭圆的长半轴和短半轴; 参数angle是该椭圆和水平方向上的旋转夹角; 参数startAngle表示绘制椭圆弧线相对该椭圆自己的水平轴的起始角度; 参数endAngel表示绘制椭圆弧线相对该椭圆自己的水平轴的终止角度; 绘制椭圆曲线的示意图如下所示:code:#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/contrib/contrib.hpp>#include<opencv2/imgproc/imgproc.hpp>#include<iostream>#include<vector>using namespace std;using namespace cv;Mat input_image;Mat output_mask;Mat output_image;Mat mask;int main(){ input_image = imread("image01.jpg"); /*椭圆皮肤模型*/ Mat skinCrCbHist=Mat::zeros(Size(256,256),CV_8UC1); ellipse(skinCrCbHist,Point(113,155.6),Size (23.4,15.2),43.0,0.0,360.0,Scalar(255,255,255),-1); imshow("ellipse", skinCrCbHist); Mat element=getStructuringElement(MORPH_RECT,Size(3,3),Point(-1,-1)); while(true) { Mat ycrcb_image; output_mask=Mat::zeros(input_image.size(),CV_8UC1); cvtColor(input_image,ycrcb_image,CV_BGR2YCrCb); //首先转换成到YCrCb空间 for(int i=0;i<input_image.rows;i++) //利用椭圆皮肤模型进行皮肤检测 { uchar* p=(uchar*)output_mask.ptr<uchar>(i); Vec3b* ycrcb=(Vec3b*)ycrcb_image.ptr<Vec3b>(i); for(int j=0;j<input_image.cols;j++) { if(skinCrCbHist.at<uchar>(ycrcb[j][1],ycrcb[j][2])>0) p[j]=255; } } 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=0;i<contours.size();i++) { if(fabs(contourArea(Mat(contours[i])))>1000/*&&fabs(arcLength(Mat(contours[i]),true))<2000*/) //判断手进入区域的阈值 filterContours.push_back(contours[i]); } output_mask.setTo(0); drawContours(output_mask,filterContours,-1,Scalar(255,0,0),CV_FILLED); //8, hierarchy); input_image.copyTo(output_image,output_mask); imshow("input image",input_image); imshow("output image",output_image); output_image.setTo(0); if(27==waitKey(30)) return 0; } return 0;}参考文献: http://www.lai18.com/content/494270.html http://docs.opencv.org/2.4/modules/core/doc/drawing_functions.html?highlight=ellipse
ellipse(Mat&img, Point center, Size axes, doubleangle, double startAngle, double endAngle, const Scalar&color, int thickness=1, int lineType=8, intshift=0)
相关文章推荐
- 学习OpenCV——肤色检测:椭圆模型 (&最大连通区域)
- Opencv之人脸肤色检测总结
- 人脸--基于肤色模型的人脸检测研究
- opencv的haarcascade模型人脸检测输出框的得分总结
- 基于人脸检测的肤色采集以及两种常见肤色模型建模
- opencv 皮肤检测 椭圆模型+轮廓去噪
- opencv提高之cascade分类器训练人脸检测模型
- opencv 自带人脸检测模型haarcascade_fromtalface选择对比
- 人脸肤色检测模型
- opencv提高之cascade分类器训练人脸检测模型
- opencv-摄像头人脸人眼实时检测
- 基于openCV实现人脸检测
- 学习OpenCV——行人检测&人脸检测(总算运行出来了)
- 自己做的一个肤色检测模型
- OpenCV学习笔记(三)人脸检测的代码分析
- OpenCV基础人脸检测(Harr级联实现)
- Linux系统下利用OpenCV实现人脸检测和基于LBPH算法的人脸识别
- IOS 中调用opencv进行人脸检测
- Android使用OpenCV实现「人脸检测」和「人脸识别」
- opencv开发笔记(十六):人脸检测的方法——HOG+SVM,类“CascadeClassifier”