61ic电子在线 首页 技术 图像技术 查看内容

基于OpenCV 肤色检测

2017-6-13 19:10| 发布者: 61ic| 查看: 1535| 评论: 0|原作者: Tianyu|来自: 61ic

摘要: 基于OpenCV 肤色检测源代码


相关代码如下
//肤色检测
void IMG_ComplexionDetector(IplImage* img)
{
      Mat imgROI(img);
      Mat ROI_mask;
      IplImage  *img_mask = NULL;
      //椭圆皮肤模型
      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); 
     Mat ycrcb_image;
     ROI_mask = Mat::zeros(imgROI.size(), CV_8UC1);
     cvtColor(imgROI, ycrcb_image, CV_BGR2YCrCb); //首先转换成到YCrCb空间
     img_mask = cvCreateImage(cvSize(IplImage(ROI_mask).width, IplImage(ROI_mask).height),\
                          IplImage  (ROI_mask).depth, IplImage(ROI_mask).nChannels);
     if(img_mask == NULL)
     {
         printf("img_mask == NULL error\r\n");
     }
      //利用椭圆皮肤模型进行皮肤检测
      for(int i = 0; i < imgROI.cols; i++)
     {
         for(int j = 0; j < imgROI.rows; j++)
         {
             Vec3b ycrcb = ycrcb_image.at<Vec3b>(j, i);
             if(skinCrCbHist.at<uchar>(ycrcb[1], ycrcb[2]) > 0)
             {
                 ROI_mask.at<uchar>(j, i) = 255;
             }
         }
     }
     cvCopy(&IplImage(ROI_mask), img_mask);
 
    //进行形态学滤波,去掉噪声
    //cvErode(img_mask, img_mask, 0, 2);   //腐蚀 2
    //cvDilate(img_mask, img_mask, 0, 10); //膨胀  5  15
}

鲜花

握手

雷人

路过

鸡蛋

地址 :湖南省株洲市天元区利江花园
合作 Email: administration@61ic.com

  • 关注61ic官方微博
    了解最新动态

  • 关注61ic微信公众号
    这里有好玩的讯息

  • 加入61ic交流群
    不断在这里成长

© 2014-2017 HuNan 湖南索炜达电子科技有限公司 . All rights reserved.
湘公网安备 43020202000020号

Archiver|手机版|小黑屋||湘ICP备13001086号-2 QQ 
返回顶部