我编写了一个函数,该函数拍摄两张相等大小的图像,并返回相同大小的组合图像,以便替换第一张图像的所有黑色像素(其中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)

此代码假定img1img2的大小相同。如果不是这种情况,则需要事先 slice img2

关于python-3.x - 将图像放在另一个图像上的更有效方法-OpenCV Python3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51293659/

10-11 13:26