from PIL import Image, ImageChops
im1 = Image.open('test1.jpeg')
im2 = Image.open('test2.jpeg')
# Choose lighter of the two images at each pixel location
combined = ImageChops.lighter(im1,im2)
paste()
,但它会将image2
中的所有黑色像素和白色像素粘贴到image1
上。为了避免这种情况,您需要制作一个蒙版,并仅在image2
非零时才进行粘贴。代码如下所示:
im1 = Image.open('test1.jpeg')
im2 = Image.open('test2.jpeg')
# Make greyscale mask from image2
mask = im2.convert('L')
mask = mask.point(lambda i: 255 if i>0 else 0)
# Paste image2 into image1 only where image2 has non-black content
im1.paste(im2, mask=mask)
我认为ImageChops.lighter()
方法更简单。
image1
中是192,在image2
中为67,则ImageChops.lighter()
方法将导致192,而paste()
方法会看到image2
中有内容,因此会给你67。由您决定!paste
这个工具并不适合这个任务,因为它会完全替换原始图片,以显示你要粘贴的图片。看起来你需要更接近混合
函数的东西,它可以产生两张图像的混合效果。不幸的是,这会导致图像变暗,因为白色与黑色混合后会变成中灰色;您可能需要将值加倍以进行补偿。
final = Image.blend(test1, test2, 0.5)
final = Image.eval(final, lambda x: 2*x))
import cv2 as cv
im1 = cv.imread('test1.jpg')
im2 = cv.imread('test2.jpg')
im3 = im1 + im2
cv.imwrite('test3.jpg', im3)