OpenCV Python cv2.connectedComponentsWithStats

时间:2018-01-25 00:16:24

标签: python opencv connected-components

设计是否必须通过cv2.connectedComponentsWithStats黑白图像而不是黑白图像?我做了一个与另一个不同的结果。

示例代码:

import os
import cv2

root = r'pth/to/img'
fl = r'img.png'

src = os.path.join( root, fl )

img = cv2.imread( src, 0 )
img_inv = cv2.bitwise_not( img )

cv2.imshow( 'Black-on-White', img )
cv2.waitKey(0)

cv2.imshow( 'White-on-Black', img_inv )
cv2.waitKey(0)

bw_nlbls, bw_lbls, bw_stats, _ = cv2.connectedComponentsWithStats( img )
wb_nlbls, wb_lbsl, wb_stats, _ = cv2.connectedComponentsWithStats( img_inv )

bw = 'Black-On-White'
wb = 'White-On-Black'

print( bw )
print( '-'*len(bw) )
print()
print('Number of Components: ', bw_nlbls)
print()
print( wb )
print( '-'*len(wb) )
print()
print('Number of Components: ', wb_nlbls)

输出:

黑上白
ImageBW

白上黑
ImageWB

Black-On-White
--------------

Number of Components:  3

White-On-Black
--------------

Number of Components:  6

我在输出中假设:

  1. 对于Black-on-White图像,黑色作为背景,白色作为前景,3个分量是背景,数字周围是白色,4号是白色。

  2. 对于白底黑图像,黑色仍然是背景和白色前景,但现在有6个组件(背景和五个数字)。

  3. 似乎是合乎逻辑的,但是我们可以将其添加到未来用户的文档中吗?我们是否可以添加功能以允许用户选择" color"他们想要表示为背景(白色还是黑色)?

1 个答案:

答案 0 :(得分:1)

Connected 组件实际上作用于 background-foreground 属性,其中黑色被视为背景,白色被视为前景。这实际上是一个标准,如果你问我也很自然。如果用户想要对黑色(背景)区域进行连通分量标记,则用户有责任进行适当的反演。