首页 > 代码库 > 【20160924】GOCVHelper 图像增强部分(2)
【20160924】GOCVHelper 图像增强部分(2)
//填充孔洞
//fillholes
Mat fillHoles(Mat src){
Mat dst = getInnerHoles(src);
threshold(dst,dst,0,255,THRESH_BINARY_INV);
dst = src + dst;
return dst;
}
//获得图像中白色的比率
float getWhiteRate(Mat src){
int iWhiteSum = 0;
for (int x =0;x<src.rows;x++){
for (int y=0;y<src.cols;y++){
if (src.at<uchar>(x,y) != 0)
iWhiteSum = iWhiteSum +1;
}
}
return (float)iWhiteSum/(float)(src.rows*src.cols);
}
//获得内部孔洞图像
Mat getInnerHoles(Mat src){
Mat clone = src.clone();
srand((unsigned)time(NULL)); // 生成时间种子
float fPreRate = getWhiteRate(clone);
float fAftRate = 0;
do {
clone = src.clone();
// x y 对于 cols rows
floodFill(clone,Point((int)rand()%src.cols,(int)rand()%src.rows),Scalar(255));
fAftRate = getWhiteRate(clone);
} while ( fAftRate < 0.6);
return clone;
}
// end of fillHoles 填充孔洞算法是我参考相关资料自己实现的。填充孔洞的关键在于获得“内部孔洞图像”。我采用的方法是在图像上随机寻找一个点作为floodfill的初始点,然后以scalar(255)来进行填充。重复这个过程,直到整个图片的白色值占到了全部图像的60%.
填充前
填充后
来自为知笔记(Wiz)
【20160924】GOCVHelper 图像增强部分(2)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。