繁体   English   中英

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

[英]Apply mask to image with OpenCv Python

我正在尝试将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

我如何使用numpy对此进行优化? 非常感谢你

在将遮罩扩展到3D之后,我们可以使用np.where ,让我们以广播的方式进行选择-

np.where(mask[...,None]==0, originalImage,[0,0,255])

或与原始代码保持更近的距离,进行复制,然后与mask一并分配-

result = originalImage.copy()
result[mask!=0] = (0,0,255)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM