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

在opencv python中将颜色从黑色反转为白色,python,image,opencv,image-processing,image-manipulation,Python,Image,Opencv,Image Processing,Image Manipulation,我有一个条件,我想在黑背景的情况下检测白线,在白背景的情况下检测黑线。我使用了如下的按位运算: cv2.bitwise_not(mask_black) if mask_black == cv2.bitwise_not(mask_black): 除非我给出这样一个条件,否则它工作正常: cv2.bitwise_not(mask_black) if mask_black == cv2.bitwise_not(mask_black): 我犯了一个错误 ValueError:包含多个元素的数组的

我有一个条件,我想在黑背景的情况下检测白线,在白背景的情况下检测黑线。我使用了如下的按位运算:

cv2.bitwise_not(mask_black)
if mask_black == cv2.bitwise_not(mask_black):
除非我给出这样一个条件,否则它工作正常:

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

这将返回上述错误

使用
cv2.bitwise_和(mask_black,mask_not)
其中
mask_not
cv2.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


这工作得很好。

如果cv2.bitwise_and(mask_black,mask_not)出现相同的错误
:value错误:包含多个元素的数组的真值不明确。使用a.any()或a.all()
事实上,我正在使用Pi摄像头实时拍摄并查找轮廓,因此我的分辨率设置为100100。所以我用100100作为w,h。如果我使用上面的代码,我会得到以下错误
太多的值要解包
或```错误:(-215)cn==1在函数countNonZero``不要直接使用代码,使用代码的主要思想。其主要思想是确定图像中白色像素的数量,然后根据数量,检查白色或黑色线条。还要确保将灰度图像(仅1通道)传递到
cv2.countNonZero()
。由于您使用的是Pi摄像头,请先将图像转换为灰度,然后再将其放入函数
gray=cv2.cvtColor(image,cv2.COLOR\u bgr2 gray)
我继续如您所说,但AttributeError:“NoType”对象没有属性“shape”。。此错误可能是由于实时视频捕获错误是由于捕获的帧不正确/无效。确保
状态
代码有效谢谢您的建议,灰度显示现在正常工作,但整个屏幕显示为轮廓,而不仅仅是白色或黑色,对此有何建议?