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