【发布时间】:2021-04-22 17:14:31
【问题描述】:
是否可以在 python 中使用 OpenCV 或 Numpy 从图像中仅复制特定区域并将其粘贴到另一个图像?
假设我有一个 RGB 图像和一个图像的灰度蒙版。 (两者大小相同)
是否可以仅将蒙版的像素与新图像的特定部分重叠的位置复制船?
这是我试过的代码。
image1 = cv2.imread("boat.png")
mask = cv2.imread("boat_mask.png")
image2 = cv2.imread("sea.png")
width, height = image1.shape
image2[y:y+height,x:x+width] = image1[mask==255]
这不起作用,因为 image1[mask==255] 不再具有 2d 形状。
解决方案:
image2_cutout = image2[y:y+height,x:x+width]
image2_cutout[mask==255] = image1[mask==255]
image2[y:y+height,x:x+width] = image2_cutout
【问题讨论】:
-
没错,
image1[mask==255]会生成一个平面数组,但只要它与复制到的视图具有相同数量的单元格,它应该可以工作。但它只会以 C 顺序将单元格写入视图。我建议您先获取一个视图,然后使用image2_view[mask==255] = image1[mask255]之类的掩码对其进行索引。这将同步位置 -
好主意!如果我同步位置,它会起作用。谢谢!
-
如果您对透明度感兴趣,而不是简单的蒙版:github.com/opencv/opencv/issues/20780