使用 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)
我有两张图片:
和
我想导出只有红色 "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)