OpenCV Python cv2.connectedComponentsWithStats

Вы должны передать 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. Для изображения «Черное на белом» черный берется в качестве фона, белый — в качестве переднего плана, а 3 компонента — это фон, белый вокруг цифр и белый внутри цифры 4.

  2. Для изображения «Белое на черном» черный по-прежнему является фоном, а белый — передним планом, но теперь у него 6 компонентов (фон и пять чисел).

Кажется логичным, но можем ли мы добавить это в документацию для будущих пользователей? Можем ли мы добавить функцию, позволяющую пользователям выбирать, какой «цвет» они хотят использовать в качестве фона (белый или черный)?


person A. Hendry    schedule 25.01.2018    source источник
comment
Соответствующие алгоритмы работают для white on black. Для вашего изображения 5 номеров, 1 фон, всего 6 компонентов   -  person Kinght 金    schedule 25.01.2018
comment
Упс, да. Я хотел сказать 6 в № 2 выше. (фон плюс пять цифр, всего шесть). Кто-нибудь знает, как сделать запрос на извлечение для обновления документации OpenCV?   -  person A. Hendry    schedule 25.01.2018
comment
@ Глушитель исправлен   -  person A. Hendry    schedule 25.01.2018
comment
Этот вопрос помог мне прекрасно понять, что делает функция connectedComponentsWithStats(), спасибо за публикацию.   -  person A__    schedule 25.09.2018


Ответы (1)


Подключенный компонент фактически работает со свойством background-foreground, где черный цвет считается фоном, а белый — передним планом. На самом деле это стандарт, и, если вы спросите меня, это также кажется естественным. Пользователь обязан выполнить соответствующую инверсию, если он хочет выполнить маркировку подключенных компонентов черной (фоновой) области.

person Operator77    schedule 22.12.2020