Python OpenCV-将颜色遮罩应用于彩色图像

Python OpenCV-将颜色遮罩应用于彩色图像,python,opencv,Python,Opencv,我正在尝试对彩色图像应用颜色遮罩。颜色遮罩是我想要应用于彩色图像的轮廓。除了粉红色的轮廓(BGR=[180105255])外,遮罩都是黑色的。奇怪的是,我能够使用以下方法应用青色[227230,49]轮廓: 让彩色图像为imgColor,青色轮廓为maskCyan。同样,除了作为轮廓一部分的像素是[227230,49]之外,该遮罩都是黑色的。然后,我可以通过执行imgColor\u,使用[u cyan\u outline=cv2.bitwise\u或(imgColor,maskCyan)将其应用

我正在尝试对彩色图像应用颜色遮罩。颜色遮罩是我想要应用于彩色图像的轮廓。除了粉红色的轮廓(BGR=
[180105255]
)外,遮罩都是黑色的。奇怪的是,我能够使用以下方法应用青色
[227230,49]
轮廓:

让彩色图像为
imgColor
,青色轮廓为
maskCyan
。同样,除了作为轮廓一部分的像素是
[227230,49]
之外,该遮罩都是黑色的。然后,我可以通过执行
imgColor\u,使用[u cyan\u outline=cv2.bitwise\u或(imgColor,maskCyan)
将其应用于图像。当我使用
maskPink
进行同样的操作时,它使用
imgColor\u和\u pink\u outline=cv2.bitwise\u或(imgColor,maskPink)
将返回没有任何遮罩或轮廓应用于它的原始图像。我想我只是误解了
cv2.bitwise\u或()


有没有其他方法可以将颜色掩码应用于彩色图像?

我认为您误解了按位
操作的属性。
cv2.bitwise\u或
获取两个源图像和一个可选掩码

cv2.bitwise_or(src1, src2, dst, mask)
因此,如果
src1
有一个值为1的像素,
src2
有一个值为2的像素,那么
src1 | src2
是:

0001 = src1
0010 = src2
0011 = src1 | src2

这使得生成的像素值为3。对于8位无符号字符图像,最大合成像素值将为255(135 | 235为255)。

如果您有用于过滤的辅助设备,则可以使用
cv2.inrange
函数进行掩蔽。将以下代码修改为您的值。根据opencv版本检查语法

Pink=cv2.inrange(pink baundary)
Black=cv2.inrange(black baundary)
Mask= Pink+Black
有关更多信息,请阅读


这更有道理。我认为这意味着如果不是0,它将接受第二个值。所以如果你有
cv2.bitwise_或([255255],[0,0,0])=[255255]
cv2.bitwise_或([255255],[126122,0])=[126122,0]
。这就是我真正需要的功能,它将第一幅图像中的任何像素替换为第二个参数中的非零像素。@greenthumbtack您想要的是基于掩码将一幅图像复制到另一幅图像。为此,请看这篇优秀的帖子:我将如何使用它?面具上只有两种颜色,黑色和粉色。我认为
inrange
是用于在图像中查找颜色,而不是应用遮罩。按位或->的可能复制会在另一幅图像中获取每一位并使用相同的位执行或。例如,如果一个图像中有63个像素,另一个图像中有255个像素,则结果将是255个像素。如果您有63和72,将给出127(63是00111111,72是01001000,二进制)。您可以将遮罩的倒数作为二进制(白色和黑色)来“删除”像素,或将其从图像中变为黑色。然后将其与青色链接一起添加,您将在图像中获得青色链接,或者使用numpy替换为@DanMašek链接