python-3.x - 将图像放在另一个图像之上的更有效方法 - OpenCV Python3
问题描述
我编写了一个函数,它获取两个大小相等的图像并返回一个大小相同的组合图像,这样第一张图像的所有黑色像素(BGR 值为 [0,0,0])都将被像素替换第二张图片的。
我的代码如下所示:
def combine(img1, img2):
retImage = np.zeros((img1.shape[0], img1.shape[1], 3), dtype=np.uint8)
for x in range(img1.shape[0]):
for y in range(img1.shape[1]):
if (0 not in img1[x][y]):
retImage[x][y] = img1[x][y]
else:
retImage[x][y] = img2[x][y]
return retImage
显然这非常慢,特别是因为我正在按顺序处理几张 4k 图像。有没有更有效的方法来做到这一点(最好使用 OpenCV 函数,如阈值/掩码)?
解决方案
以下代码使用 Numpy 操作执行您想要的操作,这应该比 Python 循环更有效:
pixel_has_zero = np.any(img1 == 0, axis=2, keepdims=True)
retImage = np.where(pixel_has_zero, img2, img1)
此代码假设img1
和img2
大小相同。img2
如果不是这种情况,则需要事先切片。
推荐阅读
- azure - 资源创建屏幕显示我的 Azure 订阅已禁用,即使它不是
- python - 无法理解如何在 django 模板中注入 crisp_form 标签
- java - 构建失败错误:java:USFW_UNSYNCHRONIZED_SINGLETON_FIELD_WRITES 如何修复现场错误报告的问题
- mongodb - 无法使用 MongoDB Compass 在 mongodb 中搜索特定日期
- android - 如何在标签布局中添加菜单
- python - 使用 Dash 和 Plotly、Python 快速可视化大表的方法
- jenkins - 在 Jenkins 中使用主动选择参数更新按钮
- statistics - 为什么这个随机分布的平均值为 0?
- kotlin - 使用 kotlin 协程时使用 try catch 块吞下异常
- typescript - 无法解析 Nest.js 中的模块依赖关系