我正在寻找一种简单而优雅的方法来单独计算每个blob中的白色像素。例如,我有这样的图片:
代码:
cv2.findContours(mat.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
areas = [(lambda c: cv2.moments(c)['m00'])(c) for c in contours]
返回[255.0,482.5,6480.5,6230.0,15531.0,19810.0],但我想只有3个值,因为有3个单独的blob。
答案 0 :(得分:2)
最佳选择似乎是使用OpenCV 3.0中的connectedComponentsWithStats。
示例:
# find all blobs and label them
n, labels, stats, _ = cv2.connectedComponentsWithStats(mat)
CC_STAT_LEFT
最左边的(x)坐标,它是水平方向上包含框的包含性开头。 CC_STAT_TOP
最上面的(y)坐标,它是垂直方向上边界框的包含性开始。 CC_STAT_WIDTH
边界框的水平尺寸CC_STAT_HEIGHT
边界框的垂直尺寸CC_STAT_AREA
连接组件的总面积(以像素为单位)因此,如果您想知道给定blob中有多少像素,只需检查行等于标签和第五列。