Чтобы инвертировать цвета с черного на белый в OpenCV Python - PullRequest
1 голос
/ 28 сентября 2019

У меня есть условие, когда я хочу обнаружить белую линию на черном фоне и черную линию на белом фоне.Я использовал операцию bitwise_not что-то вроде этого:

cv2.bitwise_not(mask_black)

Она работает идеально до тех пор, пока я не приведу условие, подобное этому:

if mask_black == cv2.bitwise_not(mask_black):

Я получаю ошибку

ValueError: Значение истинности массива с более чем одним элементом является неоднозначным.Используйте a.any () или a.all ()

У меня есть сомнения относительно использования условий, в которых, если на черном фоне появляется белая линия, и если на белом фоне появляется черная линия, должна быть обнаружена

mask_black = cv2.inRange(hsv, low_black, high_black)
mask_not=cv2.bitwise_not(mask_black)

if mask_black==cv2.bitwise_and(mask_black, mask_not):
    body 
else:
    body

Это возвращает вышеуказанную ошибку

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Идея состоит в том, чтобы проверить фон для белых пикселей с помощью cv2.countNonZero().Мы устанавливаем порог, скажем, 50%.Если более 50% фона составляют белые пиксели, это означает, что мы ищем черную линию.Точно так же, если большая часть фона черная, тогда мы ищем белую линию.

import cv2

image = cv2.imread('1.png', 0)
w, h = image.shape[:2]

if cv2.countNonZero(image) > ((w*h)//2):
    # Detect black line
    ...
else:
    # Detect white line
    ...

Чтобы инвертировать изображение, вы можете сделать это

invert = cv2.bitwise_not(image) # OR
#invert = 255 - image

image image

1 голос
/ 28 сентября 2019

Использование cv2.bitwise_and(mask_black, mask_not), где mask_not равно cv2.bitwise_not(mask_black)

...