如何将这两个图像与 python numpy 和 opencv 合并?

Ma *_*Jun 3 python opencv numpy mask

我有两个二进制图像。第一个是这样的:

在此处输入图片说明

最后一个是这样的:

在此处输入图片说明

它们没有相同大小的曲线。我想将第二个包含在黑色区域中的两个白色区域添加到第一个黑色区域。

我的代码是这样运行的,但这是一个错误的答案:

在此处输入图片说明

问题是这样的,我想得到我用最终图像绘制 最终 图像

在此处输入图片说明

我怎样才能完成这个任务?

Mad*_*ist 5

假设img1是您的第一个数组(较大的实体 blob)和img2第二个(带孔的较小 blob),您需要一种方法来识别和删除第二个图像的外部区域。在洪水填充算法是一个不错的人选。它在 opencv 中实现为cv2.floodFill.

最简单的方法是填充外边缘,然后将结果加在一起:

mask = np.zeros((img2.shape[0] + 2, img2.shape[1] + 2), dtype=np.uint8)
cv2.floodFill(img2, mask, (0, 0), 0, 0)
result = img1 + img2
Run Code Online (Sandbox Code Playgroud)

这是一个玩具示例,显示拓扑等效于原始图像的迷你图像:

img1 = np.full((9, 9), 255, dtype=np.uint8)
img1[1:-1, 1:-1] = 0
img2 = np.full((9, 9), 255, dtype=np.uint8)
img2[2:-2, 2:-2] = 0
img2[3, 3] = img2[5, 5] = 255
Run Code Online (Sandbox Code Playgroud)

图像如下所示:

fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.imshow(img1)
ax2.imshow(img2)
Run Code Online (Sandbox Code Playgroud)

开始

洪水填充后,图像如下所示:

在此处输入图片说明

将生成的图像添加在一起看起来像这样:

在此处输入图片说明

请记住,floodFill它就地运行,因此您可能需要img2在走这条路之前制作一份副本。