我编写了一个函数,该函数拍摄两张相等大小的图像,并返回相同大小的组合图像,以便替换第一张图像的所有黑色像素(其中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
的大小相同。如果不是这种情况,则需要事先 slice img2
。关于python-3.x - 将图像放在另一个图像上的更有效方法-OpenCV Python3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51293659/