Вы должны передать 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)
Вывод:
Черное на белом
Белое на черном
Black-On-White
--------------
Number of Components: 3
White-On-Black
--------------
Number of Components: 6
Я предполагаю, что вывод:
Для изображения «Черное на белом» черный берется в качестве фона, белый — в качестве переднего плана, а 3 компонента — это фон, белый вокруг цифр и белый внутри цифры 4.
Для изображения «Белое на черном» черный по-прежнему является фоном, а белый — передним планом, но теперь у него 6 компонентов (фон и пять чисел).
Кажется логичным, но можем ли мы добавить это в документацию для будущих пользователей? Можем ли мы добавить функцию, позволяющую пользователям выбирать, какой «цвет» они хотят использовать в качестве фона (белый или черный)?
white on black
. Для вашего изображения 5 номеров, 1 фон, всего 6 компонентов - person Kinght 金   schedule 25.01.2018connectedComponentsWithStats()
, спасибо за публикацию. - person A__   schedule 25.09.2018