假设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在走这条路之前制作一份副本。
| 归档时间: |
|
| 查看次数: |
2637 次 |
| 最近记录: |