[英]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.