会员
周边
众包
新闻
博问
闪存
赞助商
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
Didea
博客园
首页
新随笔
联系
订阅
管理
关于肤色检测
cvtColor(BigfaceROI, BigfaceROI_YCR, CV_BGR2YCrCb); Mat face_mask = Mat::zeros(BigfaceROI.size(), CV_8UC1); 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); for (int i = 0; i < BigfaceROI.rows; i++) //利用椭圆皮肤模型进行皮肤检测 { uchar* p = (uchar*)face_mask.ptr<uchar>(i); Vec3b* ycrcb = (Vec3b*)BigfaceROI_YCR.ptr<vec3b>(i); for (int j = 0; j < BigfaceROI.cols; j++) { if (skinCrCbHist.at<uchar>(ycrcb[j][1], ycrcb[j][2]) > 0) p[j] = 255; } } Mat element = getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1)); morphologyEx(face_mask, face_mask, MORPH_CLOSE, element); vector< vector<point> > contours; // 轮廓 vector< vector<point> > filterContours; // 筛选后的轮廓 contours.clear(); filterContours.clear(); findContours(face_mask, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE); // 去除细小杂质 for (size_t i = 0; i < contours.size(); i++) { if (fabs(contourArea(Mat(contours[i]))) > 20/*&&fabs(arcLength(Mat(contours[i]),true))<2000*/) // filterContours.push_back(contours[i]); } if (filterContours.size() != 0) { sort(filterContours.begin(), filterContours.end(), SortBySize); face_mask.setTo(0); drawContours(face_mask, filterContours, 0, Scalar(255, 0, 0), CV_FILLED); BigfaceROI.copyTo(face_skin, face_mask); } </point></point></uchar></vec3b></uchar>
posted @
2016-03-15 18:42
Didea
阅读(
335
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
公告