2013-04-04 106 views
1

我想用opencv帮助人体皮肤以不同的强度晒黑。我已经确定了人体皮肤并改变了这些像素的色调。但并不顺利。边缘平滑和在iOS中使用opencv填充内部轮廓

ScreenShot 1

左上 - 原始图像 右上 - 原始图像 左下的饱和信道 - 灰度掩模识别原始图像上的皮肤的位置 右下 - 与色调结果图像改变位于像素在面具。

现在我的问题是,在蒙版图像中,由于原始图像中色调或亮度的变化而留下一些空白。这就是为什么这些部分在结果图像中被遗漏的原因。谁能告诉我如何填补蒙版图像中的小缺口?

Gaps in mask image

另外,如果有人可以帮助我的平滑只有我晒黑了面具的边缘将帮助我很多。请参见下面的参考图像,预先

Sharp tanned mask edge

感谢。

回答

3

怎么样?

morphologyEx(grey,grey,MORPH_CLOSE,getStructuringElement(MORPH_ELLIPSE,Size(7,7))); 

虽然轮廓被合并为左手

simple

编辑:更多的参与略有

Mat tmp=grey.clone(); 
morphologyEx(tmp,tmp,MORPH_GRADIENT,getStructuringElement(MORPH_ELLIPSE,Size(3,3))); 
bitwise_not(tmp,tmp); 
Mat smallholes=Mat::zeros(tmp.size(), CV_8UC1); 
vector<vector<Point>> contours; 
findContours(tmp,contours,CV_RETR_LIST,CV_CHAIN_APPROX_SIMPLE); 
for(int i = 0; i < contours.size(); i++) 
{  
    double area = contourArea(Mat(contours[i])); 
    if(area<100) 
     drawContours(smallholes, contours, i, 255, -1); 
} 
Mat done; 
bitwise_or(grey,smallholes,done); 
morphologyEx(done,done,MORPH_CLOSE,getStructuringElement(MORPH_ELLIPSE,Size(3,3))); 

long

+0

这极大地工作!非常感谢你。目前我正试图平滑晒黑后的锐利边缘,正如我在第二次截屏中提到的那样。任何建议都一样吗? – 2013-04-10 08:21:26

+1

怎么样http://stackoverflow.com/questions/7644996/how-to-increase-contours-precision?我还没有亲自尝试过,但它似乎至少有一个人工作 – 2013-04-10 09:41:18

+0

@AnjumShrimali你做了什么边缘平滑? – 2015-12-16 12:55:35