使用 OpenCv Python 将蒙版应用于图像

Fed*_*hin 5 python opencv numpy

我正在尝试将 opencv 与 python 一起使用,但我遇到了这个问题:

我有一个图像和一个二进制掩码(带有 0 和 255 的单通道图像)我想迭代掩码的每个像素并根据掩码像素的值对原始图像执行一些操作。我如何使用 numpy 优化来做到这一点?

例如,假设我想创建一个新图像,其中每个像素在蒙版中的值为 0 时保持不变,如果蒙版中的像素为 255,则将其设置为 (0,0,255),例如:

def inpaint(originalImage, mask):
    [rows, columns, channels] = originalImage.shape
    result = np.zeros((rows,columns,channels))
    for row in range(rows):
        for column in range(columns):
            if(mask[row,column]==0):
                result[row,column] = originalImage[row,column]
            else:
                result[row,column] = (0,0,255)
    return result
Run Code Online (Sandbox Code Playgroud)

如何使用 numpy 优化它?非常感谢

Div*_*kar 7

我们可以np.where在扩展掩码后使用3D,让它以广播的方式进行选择 -

np.where(mask[...,None]==0, originalImage,[0,0,255])
Run Code Online (Sandbox Code Playgroud)

或者更接近原始代码,制作副本,然后一次性分配mask-

result = originalImage.copy()
result[mask!=0] = (0,0,255)
Run Code Online (Sandbox Code Playgroud)