Pillow和Numpy的图像演绎

时间:2017-11-13 13:03:14

标签: python image numpy pillow

我有两张图片: enter image description here

enter image description here

我想要导出一个只有红色" Hello"像:

enter image description here

所以我正在运行一个简单的演绎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")

但是这会回来:

enter image description here

而不是上面的。我究竟做错了什么?我也需要numpy,或者我可以仅使用Pillow库吗?

编辑:

它也适用于这样的图像:

enter image description here

我的代码返回:

enter image description here

困惑于为什么它在边缘处如此像素化!

1 个答案:

答案 0 :(得分:3)

将第二张图像中不需要的像素设置为0可能更容易吗?

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

似乎对我有效(显然只是因为我使用了你上传的JPG而有更大的文物)

Result of script

也可以在没有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)