在 opencv 中将颜色从黑色反转为白色 python

To invert colours from black to white in opencv python

我有一个条件,我想检测黑色背景的白线和白色背景的黑线。我使用了 bitwise_not 这样的操作:

cv2.bitwise_not(mask_black)

除非我给出这样的条件,否则它工作得很好:

if mask_black == cv2.bitwise_not(mask_black):

我收到一个错误

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or 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

这将返回上述错误

使用 cv2.bitwise_and(mask_black, mask_not) 其中 mask_notcv2.bitwise_not(mask_black)

想法是用 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

invert = cv2.bitwise_not(image)

一切正常。