【问题标题】:Python Image masking and removing BackgroundPython图像遮罩和去除背景
【发布时间】:2021-04-07 22:43:36
【问题描述】:

我有两个图像:太阳穴和面具(心脏)。我想用心形遮住寺庙,去掉黑色背景。结果应该是从镜腿上切下的心形切口,背景为白色或透明。

【问题讨论】:

  • 这听起来像是 graphicdesign.stackexchange.com 的工作
  • 到目前为止你尝试了什么?
  • 我只是不确定如何去做
  • @sam 换白 ????将心脏向左并乘以这两个图像,也许您需要将二进制图像堆叠成 x3 形状以乘以彩色图像并将心脏归一化 255。
  • 我正在寻找一种适用于任何简单形状和图像的通用方法

标签: python image-processing mask masking


【解决方案1】:

您可以使用 pillowputalpha 将灰度图像 (​​L) 添加到 RGB 图像作为 alpha 通道 - 因此它将具有透明背景。但两张图片的大小必须相同。

from PIL import Image

# load images
img_org  = Image.open('temple.jpg')
img_mask = Image.open('heart.jpg')

# convert images
#img_org  = img_org.convert('RGB') # or 'RGBA'
img_mask = img_mask.convert('L')    # grayscale

# the same size
img_org  = img_org.resize((400,400))
img_mask = img_mask.resize((400,400))

# add alpha channel    
img_org.putalpha(img_mask)

# save as png which keeps alpha channel 
img_org.save('output-pillow.png')


顺便说一句:

您可以使用pillow 中的其他功能仅调整蒙版的大小并保持心脏的原始比例。

黑色给全透明,白色保持原色,但你也可以灰色使像素半透明。


编辑:

cv2也一样

import cv2

# load images
img_org  = cv2.imread('temple.jpg')
img_mask = cv2.imread('heart.jpg')

# convert colors
#img_org  = cv2.cvtColor(img_org, ???)
img_mask = cv2.cvtColor(img_mask, cv2.COLOR_BGR2GRAY)

# the same size
img_org  = cv2.resize(img_org,  (400,400))
img_mask = cv2.resize(img_mask, (400,400))

# add alpha channel 
b, g, r = cv2.split(img_org)
img_output = cv2.merge([b, g, r, img_mask], 4)

# write as png which keeps alpha channel 
cv2.imwrite('output-cv2.png', img_output)

顺便说一句: cv2 使用 BGR 而不是 RGB

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多