在深度学习中,尤其是语义分割模型部署的结果后处理中,离不开各类形态学处理方法,其中以连通域处理为主;同时在一些传统的图像处理算法中,也需要一些形态学、连通域处理方法。为此,整理了一些常用的连通域处理函数:查找图像中最大的连通域、删除图像中小面积的连通域、删除图像中的黑色连通域、获取形状的骨架。关于博文代码中连通域处理中的图像D:/Img_data/15.bmp,如下所示,各位如果要运行出一样的效果的话可以用下图进行测试。
1、查找图像中最大的连通域
该功能基于connectedComponents函数实现,具体包含4步: 1、通过connectedComponents将每一个连通域的像素用相同的label值标记结果出入Mat labels中 2、然后遍历mat即可找出面积最大的连通域的label值 3、最后遍历Mat labels将像素值不等于最大的连通域的label值的置0即可。
1.1 函数实现
函数命名为findLargesrArea,传入CV_8UC1型的mat,返回结果也为CV_8UC1类型
//找图图中最大的连通域
Mat findLargesrArea(Mat srcImage)
{
Mat temp;
Mat labels;
srcImage.copyTo(temp);
//1. 标记连通域
int n_comps = connectedComponents(temp, labels, 4, CV_16U);
vector histogram_of_labels;
for (int i = 0; i |