如何在OpenCV python中正确设置二进制掩码?

如何在OpenCV python中正确设置二进制掩码?,python,opencv,image-processing,cv2,Python,Opencv,Image Processing,Cv2,我有一个图像img。我还有一个掩码,在所有我想保留img像素值的地方都有值255,在所有其他地方都是0 我想使用这两个图像,即。掩码和img,这样我就可以在掩码为255的位置创建一个具有原始img值的矩阵,在掩码为0的所有位置创建一个值为-1的矩阵 到目前为止,我写了以下内容: maskedImg = cv2.bitwise_and(img, mask) 但是在面具有0的所有地方面具都有0。如何使用快速逐位运算在所有其他位置获得值-1而不是0?我不知道图像的数据类型是什么。默认值为np.uin

我有一个图像img。我还有一个掩码,在所有我想保留img像素值的地方都有值255,在所有其他地方都是0

我想使用这两个图像,即。掩码和img,这样我就可以在掩码为255的位置创建一个具有原始img值的矩阵,在掩码为0的所有位置创建一个值为-1的矩阵

到目前为止,我写了以下内容:

maskedImg = cv2.bitwise_and(img, mask)

但是在面具有0的所有地方面具都有0。如何使用快速逐位运算在所有其他位置获得值-1而不是0?

我不知道图像的数据类型是什么。默认值为np.uint8,因此无法在结果上设置-1,它将下溢到
-1+256=255
。也就是说,如果数据类型为
np.uint8
,则不能将其设置为负值

如果要设置为-1,则应更改
dtype

#masked = cv2.bitwise_and(img, mask).astype(np.int32)
masked = np.int32(img)
masked[mask==0] = -1

交换掩码(按位不交换)并按位或使用image@MadPhysicist谢谢你的评论。如果将遮罩和或遮罩与图像交换,则遮罩外部的所有位置都将具有值255。我希望面具之外的所有其他地方都是-1。不知道为什么你更喜欢-1。。。但是OpenCV通常对大多数图像使用uint8,包括遮罩,所以可能您必须首先更改类型。。。。让它能够拥有-1@Londonguy. 255在所有意图和目的上都是-1。此外,正如@api55所指出的,您需要指出您的图像类型,并告诉我们您愿意进行多大程度的转换。