Python 屏蔽两个图像并合并为一个图像
我正在做一个项目,我在两张不同的图片上使用不同的遮罩,我想把它们组合成一张图片。到目前为止,我已经有了遮罩(尽管在边缘上有一些错误),现在我正在尝试组合图像Python 屏蔽两个图像并合并为一个图像,python,image-processing,python-imaging-library,masking,Python,Image Processing,Python Imaging Library,Masking,我正在做一个项目,我在两张不同的图片上使用不同的遮罩,我想把它们组合成一张图片。到目前为止,我已经有了遮罩(尽管在边缘上有一些错误),现在我正在尝试组合图像 如何改进遮罩,使结果的边缘没有错误(请参见图像) 如何有效地将图像组合成一个图像,以生成第三个图像?我一直在尝试使用一些透明效果,但没有成功。我要做的是合并两个图像,使它们形成一个完整的圆。如果需要任何原始图像,请让我知道 从PIL导入图像 #加载图像 img_day=Image.open('day.jpeg')) img\u night=
从PIL导入图像
#加载图像
img_day=Image.open('day.jpeg'))
img\u night=Image.open('night\u mirror.jpg'))
night_mask=Image.open('Masks/12.5.jpg'))
day_mask=Image.open('Masks/11.5.jpg'))
#转换图像
#img_org=img_org.convert('RGB')#或'RGBA'
night_mask=night_mask.convert('L')#灰度
day\u mask=day\u mask.convert('L'))
#同样大小
img_day=img_day.resize((750750))
img_night=img_night.resize((750750))
夜间遮罩=夜间遮罩。调整大小((750750))
day_mask=day_mask.调整大小((750750))
#添加alpha通道
img_day.putalpha(day_掩码)
img_night.putalpha(夜间面罩)
img_night=img_night.旋转(-170)
#另存为png,保留alpha通道
img_day.save('image_day.png'))
img_night.save('image_night.png'))
我的夜晚秀()
每日节目
谢谢你的帮助
给您点建议:
PIL.ImageOps.mirror
来实现这一点。然后使用img.paste()
将一个图像粘贴到另一个图像上。作为第二个参数,您给出了图像应该粘贴到另一个图像上的坐标,非常重要的是,作为第三个参数,您指定了一个透明度遮罩。由于您的图像已经具有alpha通道,因此可以将同一图像用作遮罩。PIL将自动使用其alpha通道进行掩蔽。请注意,我必须将粘贴位置调整4个像素以正确重叠图像
PIL.ImageOps.mirror
来实现这一点。然后使用img.paste()
将一个图像粘贴到另一个图像上。作为第二个参数,您给出了图像应该粘贴到另一个图像上的坐标,非常重要的是,作为第三个参数,您指定了一个透明度遮罩。由于您的图像已经具有alpha通道,因此可以将同一图像用作遮罩。PIL将自动使用其alpha通道进行掩蔽。请注意,我必须将粘贴位置调整4个像素以正确重叠图像
从PIL导入图像,ImageDraw
#加载图像
img_day=Image.open('day.jpg'))
img_night=Image.open('night.jpg')
#调整图像大小
目标_大小=(750750)
img_day=img_day.调整大小(目标大小)
img_night=img_night.调整大小(目标大小)
#生成合适的掩码
day\u mask=图像。新建('L',目标大小)
draw=ImageDraw.draw(日遮罩)
绘制圆弧([10,10,740,740],120,270,255,150)
夜间遮罩=图像。新('L',目标大小)
draw=ImageDraw.draw(夜间遮罩)
绘制圆弧([10,10,740,740],270,120,255,150)
#放置alpha通道
img_day.putalpha(day_掩码)
img_night.putalpha(夜间面罩)
#撰写并保存图像
img=Image.composite(img\u白天、img\u晚上、白天、白天)
保存('img.png')
这就是输出:
----------------------------------------
系统信息
----------------------------------------
平台:Windows-10-10.0.16299-SP0
Python:3.8.5
枕头:8.0.1
----------------------------------------
主要问题是遮罩中的(JPG)瑕疵(顶部的白线,“平滑”边缘)。为什么不使用动态生成遮罩?最后一步是合并两个图像
以下是一些代码(我将您的第一张图像作为所需的输出,因此选择了角度):
从PIL导入图像,ImageDraw
#加载图像
img_day=Image.open('day.jpg'))
img_night=Image.open('night.jpg')
#调整图像大小
目标_大小=(750750)
img_day=img_day.调整大小(目标大小)
img_night=img_night.调整大小(目标大小)
#生成合适的掩码
day\u mask=图像。新建('L',目标大小)
draw=ImageDraw.draw(日遮罩)
绘制圆弧([10,10,740,740],120,270,255,150)
夜间遮罩=图像。新('L',目标大小)
draw=ImageDraw.draw(夜间遮罩)
绘制圆弧([10,10,740,740],270,120,255,150)
#放置alpha通道
img_day.putalpha(day_掩码)
img_night.putalpha(夜间面罩)
#撰写并保存图像
img=Image.composite(img\u白天、img\u晚上、白天、白天)
保存('img.png')
这就是输出:
----------------------------------------
系统信息
-----------------
from PIL import Image, ImageOps
# load images
img_day = Image.open('day.jpg')
img_night = Image.open('night.jpg')
night_mask = Image.open('night_mask.jpg')
day_mask = Image.open('day_mask.jpg')
# convert images
#img_org = img_org.convert('RGB') # or 'RGBA'
night_mask = night_mask.convert('L') # grayscale
day_mask = day_mask.convert('L')
# the same size
img_day = img_day.resize((750,750))
img_night = img_night.resize((750,750))
night_mask = night_mask.resize((750,750))
day_mask = day_mask.resize((750,750))
# add alpha channel
img_day.putalpha(day_mask)
img_night.putalpha(night_mask)
img_night = ImageOps.mirror(img_night)
img_night.paste(img_day, (-4, 0), img_day)
img_night.save('composite.png')