Har*_*kar 4 python image paste python-imaging-library
我有 2 个图像,test1.jpg 和 test2.jpg,它们是 RGB 图像。它们是从 2D numpy 数组转换而来的,因此它们是单色图像。它们具有相同的形状。当我使用该paste功能时,我只看到其中一张图像,而不是两张图像。
以下是 test1 和 test2 jpg:
test1.paste(test2)这是我做完之后得到的test1.save('final.jpg'):
为什么只显示test2?
这是我的代码:
im1 = Image.open('test1.jpg')
im2 = Image.open('test2.jpg')
im1.paste(im2)
im1.save('final.jpg')
Run Code Online (Sandbox Code Playgroud)
您只需使用PIL 通道操作在每个点选择两个图像中较亮的一个:
\nfrom PIL import Image, ImageChops\n\nim1 = Image.open(\'test1.jpeg\')\nim2 = Image.open(\'test2.jpeg\')\n\n#\xc2\xa0Choose lighter of the two images at each pixel location\ncombined = ImageChops.lighter(im1,im2)\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,您可以按照最初的意图使用,但它会粘贴来自overpaste()的所有黑色和白色像素。为了避免这种情况,您需要制作一个遮罩并仅粘贴在image2image1image2非零的位置。这可能看起来像这样:
im1 = Image.open(\'test1.jpeg\')\nim2 = Image.open(\'test2.jpeg\')\n\n# Make greyscale mask from image2\nmask = im2.convert(\'L\')\nmask = mask.point(lambda i: 255 if i>0 else 0)\n\n# Paste image2 into image1 only where image2 has non-black content\nim1.paste(im2, mask=mask)\nRun Code Online (Sandbox Code Playgroud)\n我只是认为ImageChops.lighter()方法比较简单。
请注意,这两种方法会产生略有不同的结果。例如,如果像素为 192 inimage1和 67 in image2,则该ImageChops.lighter()方法将得到 192 ,而该paste()方法将看到有一些东西在image2,因此为您提供 67。您的选择!