aihot  2017-04-27 20:49:14  OpenCV |   查看评论   
  •   
  • //肤色提取,skinArea为二值化肤色图像  
  • void skinExtract(const Mat &frame, Mat &skinArea)  
  • {  
  •     Mat YCbCr;  
  •     vector<Mat> planes;  
  •   
  •     //转换为YCrCb颜色空间  
  •     cvtColor(frame, YCbCr, CV_RGB2YCrCb);  
  •     //将多通道图像分离为多个单通道图像  
  •     split(YCbCr, planes);   
  •   
  •     //运用迭代器访问矩阵元素  
  •     MatIterator_<uchar> it_Cb = planes[1].begin<uchar>(),  
  •                         it_Cb_end = planes[1].end<uchar>();  
  •     MatIterator_<uchar> it_Cr = planes[2].begin<uchar>();  
  •     MatIterator_<uchar> it_skin = skinArea.begin<uchar>();  
  •   
  •     //人的皮肤颜色在YCbCr色度空间的分布范围:100<=Cb<=127, 138<=Cr<=170  
  •     for( ; it_Cb != it_Cb_end; ++it_Cr, ++it_Cb, ++it_skin)  
  •     {  
  •         if (138 <= *it_Cr &&  *it_Cr <= 170 && 100 <= *it_Cb &&  *it_Cb <= 127)  
  •             *it_skin = 255;  
  •         else  
  •             *it_skin = 0;  
  •     }  
  •   
  •     //膨胀和腐蚀,膨胀可以填补凹洞(将裂缝桥接),腐蚀可以消除细的凸起(“斑点”噪声)  
  •     dilate(skinArea, skinArea, Mat(5, 5, CV_8UC1), Point(-1, -1));  
  •     erode(skinArea, skinArea, Mat(5, 5, CV_8UC1), Point(-1, -1));  
  • }  
  •  

    效果:


     

     
     

    除特别注明外,本站所有文章均为 赢咖4注册 原创,转载请注明出处来自简单粗糙的指尖检测方法(FingerTips Detection)

    留言与评论(共有 0 条评论)
       
    验证码:
    [lianlun]1[/lianlun]