首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用原始图像opencv Python替换掩码

用原始图像opencv Python替换掩码
EN

Stack Overflow用户
提问于 2017-11-01 19:23:28
回答 3查看 4.9K关注 0票数 2

我试图用原始图像像素替换使用掩码的对象。我有一个遮罩,在没有检测到对象的地方显示黑色,如果检测到,则显示为白色。然后,我在where语句中使用该图像

代码语言:javascript
复制
image[np.where((image2 == [255,255,255].any(axis = 2)) 

我被困在这里,我不知道如何将找到的白色值改变为原始图像(与其他面具一起使用)。我试过了image.shape,但这没有用。

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-01 22:13:15

制作掩码的副本,然后从白色像素坐标在掩码的白色像素上绘制原始图像。您也可以检查mask == 255来比较元素。您不需要np.where,因为您可以通过mask == 255创建的布尔掩码来索引数组。

代码语言:javascript
复制
out = mask.copy()
out[mask == 255] = original_image[mask == 255]
票数 3
EN

Stack Overflow用户

发布于 2017-11-02 10:15:20

您可以使用按位操作。试试这个:

代码语言:javascript
复制
replaced_image = cv2.bitwise_and(original_image,original_image,mask = your_mask)

访问arithmetics.html以了解有关按位操作的更多信息

票数 2
EN

Stack Overflow用户

发布于 2022-01-26 21:33:20

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47062216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档