函数介绍
retval, labels, stats, centroids = cv2.connectedComponentsWithStats(image, connectivity=8)
输入值:
- image : 是要处理的图片,官方文档要求是8位单通道的图像。
- connectivity : 可以选择是4连通还是8连通。
输出值
- retval : 返回值是连通区域的数量。
- labels : labels是一个与image一样大小的矩形(labels.shape = image.shape),其中每一个连通区域会有一个唯一标识,标识从0开始。
- stats :stats会包含5个参数分别为x,y,h,w,s。分别对应每一个连通区域的外接矩形的起始坐标x,y;外接矩形的wide,height;s其实不是外接矩形的面积,实践证明是labels对应的连通区域的像素个数。
- centroids : 返回的是连通区域的质心。
实例-参数详解
举个栗子
1、 我创建了10x10的图片,其中像素值分别有0和100
输入的image就是我们这个10x10的图片
如果我们要分析8连通,就令
connectivity=8
2、用 opencv 将图片读入
image = cv2.imread('test1.tif') # 将上述的10*10图片存为test.tif的图片
img = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY) #转灰度
retval, labels, stats, centroids = cv2.connectedComponentsWithStats(img, connectivity=8)
返回值
retval #retval = 3
>>> 3
stats #我们看出有3个连通区域
# x y w h s
>>> array([[ 0, 0, 10, 10, 76], # 这代表整个图片,0值也有连通区域
[ 4, 1, 5, 6, 18], # 这里18代表有18个像素 下面的6同理