Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 屏蔽两个图像并合并为一个图像_Python_Image Processing_Python Imaging Library_Masking - Fatal编程技术网

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个像素以正确重叠图像

  • 结果:

    主要问题是遮罩中的(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')
    
    这就是输出:

    ----------------------------------------
    系统信息
    ----------------------------------------
    平台: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')