基本概念
在数字图像处理中,有个连通域的概念
连通区域(Connected Component)一般是指图像中具有相同像素值且位置相邻的前景像素点组成的图像区域(Region,Blob)。
在图像中,最小的单位是像素,每个像素周围有 8 个邻接像素,常见的邻接关系有 2 种:4 邻接与 8 邻接。4 邻接一共 4 个点,即上下左右、8 邻接的点一共有 8 个,包括了对角线位置的点,如下图所示
二值图(图上的值只有 0 和 1,或者 0 和 255)是非常常用的一种图像,我们可以用它来寻找目标的轮廓,形状识别等操作,同时,我们也利用二值图来寻找一个图像的连通域。如下图,就是一个很直观的连通域图,图中总共有 6 个连通域。
寻找连通域的方法
OpenCV 库
在 OpenCV 中,提供了一个函数 cv2.connectedComponentsWithStats
可以帮助我们计算连通域的一些信息,其接口说明如下:
connectedComponentsWithStats(image[, labels[, stats[, centroids[, connectivity[, ltype]]]]]) -> retval, labels, stats, centroids
image:输入的图像,必须是单通道 8-bit 的图像
labels:一张和输入图像大小一样的掩膜(mask),对于相同的连通域,使用同一个标号进行标记,背景标记为 0
stats:记录了连通域的一些信息
centroids 连通域的质心
connectivity:4 或者 8, 使用 4 连通域还是 8 连通域
ltype:输入 labels 的数据类型,CV_32S 或者 CV_16U
下图是一个图像得到的连通域掩膜,即上面提到的 labels 输出
为了方便起见,我们构建一张图来测试我们的程序