python - Python图像遮罩和去除背景
问题描述
我有两个图像:太阳穴和面具(心脏)。我想用心形遮住寺庙,去掉黑色背景。结果应该是从镜腿上切下的心形切口,背景为白色或透明。
解决方案
您可以使用pillow
和putalpha
将灰度图像 (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
ogRGB
推荐阅读
- flutter - 如何将新的小部件添加到 pdf/widgets 颤动
- python - 如何禁止我的播放器连续多次跳跃?游戏
- latex - 如何使用 scrbook 和 scrlayer-scrpage 更改章节包的页码
- c# - 使用 BouncyCastle 或 AesGcm 将此 Java 解密代码转换为 C# 有什么帮助吗?
- regex - 正则表达式,如何返回标题中存在的一组单词?
- if-statement - Windows 批处理 if 语句受 if 块中的语句影响
- matrix - 通过行排列找到具有最大迹线的矩阵的复杂性
- javascript - ng-zorror-antd nzSortFn 调试自定义排序功能
- swiftui - SwiftUI 显示/关闭键盘
- ios - 为什么 xcode 不在设备上构建应用程序,而是在模拟器上构建?