使用 Pillow 和 Numpy 进行图像推导

Image deduction with Pillow and Numpy

我有两张图片:

我想导出只有红色 "Hello" 的图像,例如:

所以我是运行一个简单的推演python剧本:

from PIL import Image
import numpy as np

root = '/root/'
im1 = np.asarray(Image.open(root+'1.jpg'))
im2 = np.asarray(Image.open(root+'2.jpg'))

deducted_image = np.subtract(im1, im2)

im = Image.fromarray(np.uint8(deducted_image))
im.save(root+"deduction.jpg")

但是这个returns:

而不是上面的。我究竟做错了什么?我还需要 numpy 还是只用 Pillow 库就可以做到这一点?


编辑:

它也应该适用于这样的图像:

我的代码 returns:

不明白为什么它的边缘如此像素化!

将第二张图片中不需要的像素设置为 0 可能更简单?

im = im2.copy()
im[im1 == im2] = 0
im = Image.fromarray(im)

似乎对我有用(显然只有更大的工件,因为我使用了您上传的 JPG)

不用numpy也可以这样做:

from PIL import ImageChops
from PIL import Image

root = '/root/'
im1 = Image.open(root + '1.jpg')
im2 = Image.open(root + '2.jpg')

def nonzero(a):
    return 0 if a < 10 else 255

mask = Image.eval(ImageChops.difference(im1, im2), nonzero).convert('1')

im = Image.composite(im2, Image.eval(im2, lambda x: 0), mask)