如何计算opencv中每个blob中的白色像素?

时间:2015-10-14 16:07:18

标签: python opencv

我正在寻找一种简单而优雅的方法来单独计算每个blob中的白色像素。例如,我有这样的图片:

black and white image

代码:

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。

1 个答案:

答案 0 :(得分:2)

最佳选择似乎是使用OpenCV 3.0中的connectedComponentsWithStats

示例:

# find all blobs and label them
n, labels, stats, _ = cv2.connectedComponentsWithStats(mat)
  • n - 不同blob的数量
  • 标签 - 具有相同形状的矩阵,如mat,并包含每个点的标签
  • 统计信息 - 按以下顺序显示每个blob的统计信息:
    • CC_STAT_LEFT最左边的(x)坐标,它是水平方向上包含框的包含性开头。
    • CC_STAT_TOP最上面的(y)坐标,它是垂直方向上边界框的包含性开始。
    • CC_STAT_WIDTH边界框的水平尺寸
    • CC_STAT_HEIGHT边界框的垂直尺寸
    • CC_STAT_AREA连接组件的总面积(以像素为单位)

因此,如果您想知道给定blob中有多少像素,只需检查行等于标签和第五列。