簡體   English   中英

用原始圖像opencv Python替換掩碼

[英]replace mask with original image opencv Python

我正在嘗試用原始圖像像素替換我使用蒙版找到的對象。 我有一個蒙版,在未檢測到物體的地方顯示黑色,如果檢測到,則顯示為白色。 然后我在 where 語句中使用圖像

image[np.where((image2 == [255,255,255].any(axis = 2)) 

我被困在這里,我不知道如何將找到的白色值更改為原始圖像(與其他蒙版一起使用)。 我試過image.shape但這沒有用。

謝謝。

復制蒙版,然后從白色像素坐標在蒙版的白色像素上繪制原始圖像。 您還可以檢查mask == 255以進行逐元素比較。 您不需要np.where,因為您可以通過mask == 255創建的布爾掩碼對數組進行索引。

out = mask.copy()
out[mask == 255] = original_image[mask == 255]

您可以使用按位運算。 嘗試這個:

replaced_image = cv2.bitwise_and(original_image,original_image,mask = your_mask)

例 訪問https://docs.opencv.org/3.3.0/d0/d86/tutorial_py_image_arithmetics.html進一步了解按位操作

import os
import cv2
from netpbmfile import imread
 
img_dir = '.'
mask_dir = '.'
new_bg = 'image.png'

def get_foreground(fg_image_name, mask_name, bg_image_name):
    fg_image = cv2.imread(fg_image_name)
    mask = imread(mask_name)
    mask_inverse = (1-mask)
    bg_image = cv2.imread(bg_image_name)
    bg_image = cv2.resize(bg_image, (fg_image.shape[1], fg_image.shape[0]))
    foregound = cv2.bitwise_and(fg_image, fg_image, mask=mask)
    background = cv2.bitwise_and(bg_image, bg_image, mask=mask_inverse)
    composite = foregound + background
    
    return composite


image_fg = get_foreground(os.path.join(img_dir, "NP1_0.jpg"), os.path.join(mask_dir, "NP1_0_mask.pbm"), new_bg)
cv2.imwrite("foreground.jpg", image_fg)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM