python - 如何将这两个图像与 python numpy 和 opencv 合并?
问题描述
我有两个二进制图像。第一个是这样的:
最后一个是这样的:
它们没有相同大小的曲线。我想将第二个包含在黑色区域中的两个白色区域添加到第一个的黑色区域中。
我的代码是这样运行的,但这是一个错误的答案:
问题是这样的,我想得到我用最终图像绘制的 最终 图像:
我怎样才能完成这项任务?
解决方案
假设img1
您的第一个阵列(较大的实心斑点)img2
是第二个(带孔的较小斑点),您需要一种方法来识别和移除第二个图像的外部区域。洪水填充算法是一个很好的候选者。它在 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
这是一个玩具示例,显示拓扑上与您的原件等效的迷你图像:
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
图像如下所示:
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.imshow(img1)
ax2.imshow(img2)
洪水填充后,图像如下所示:
将生成的图像添加在一起看起来像这样:
请记住,它floodFill
是就地操作的,因此您可能需要img2
在走这条路之前制作一份副本。
推荐阅读
- reactjs - React Datepicker 在 Popover 中显示上一年
- lexikjwtauthbundle - 没有测试文件夹
- python - 使用函数的输出作为每次新迭代的相同函数的输入
- c++ - 在邻接列表上添加一个关系时如何解决此分段错误?
- python - 数据帧列表到 JSON 列表
- android - Xamarin:按下设备按钮时触发页面功能
- c - 唤醒一个正在休眠的 Kthread
- angular - 更改 FormGroup.value 编辑实际的 formGroup 控件
- python - 如何在 shell 命令中发送 Jenkins 内部版本号作为参数,该命令将在构建结束后执行
- ruby-on-rails - 为什么重定向在rails中不能完美运行,而我正在尝试添加一个方法,它总是在控制器中寻找主要方法