opencv python复制掩模区域(黑色或白色像素)到BGR图像区域上

时间:2016-06-01 16:13:20

标签: python opencv

在OpenCV python中,假设我们用cv2.imread读取一个图像并得到一个BGR numpy数组。接下来我们使用cv2.inRange命令生成一个掩码。掩模具有相同的宽度/高度,每个掩模像素为黑色或白色。

我想将遮罩中的区域(作为黑白像素的图像)复制到彩色图像的区域。

我该怎么做?这不起作用

img[10:20,10:20] = mask[10:20,10:20]

我必须先将面具转换为BGR图像吗?如果是这样的话?

编辑:我不想像apply mask to color image那样将整个蒙版应用于图像。另一种说出我想要的方式:将面具看作黑白图像。我想将该图像的区域(作为一组黑色或白色像素)复制到另一个图像上。除了仅包含黑色或白色像素的一个较小矩形区域之外,所得到的图像将是彩色图像。结果将类似于我在photoshop中复制黑/白图像的矩形区域并将该矩形移到彩色图像的区域上。

(我是OpenCV的新手)

1 个答案:

答案 0 :(得分:0)

如果您尝试直接使用单通道(灰度)遮罩,则阵列切片的形状将不同,操作将失败。

>>> img[10:20,10:20] = mask[10:20,10:20]

ValueError: could not broadcast input array from shape (10,10) into shape (10,10,3)

您必须将遮罩转换为BGR,这将使其成为3个通道,就像原始图像一样。

>>> bgr_mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
>>> img[10:20,10:20] = bgr_mask[10:20,10:20]