用原始图像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)
我正在尝试用原始图像像素替换使用遮罩找到的对象。我有一个面具,在未检测到物体的地方显示黑色,如果检测到物体则显示白色。然后我在 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)
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)