在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的新手)
答案 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]