Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 用枕头和臀部演绎图像_Python_Image_Numpy_Pillow - Fatal编程技术网

Python 用枕头和臀部演绎图像

Python 用枕头和臀部演绎图像,python,image,numpy,pillow,Python,Image,Numpy,Pillow,我有两张照片: 及 我想导出一个只有红色“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 =

我有两张照片:

我想导出一个只有红色“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")
但这也带来了:

而不是上述情况。我做错了什么?我还需要numpy吗?或者我可以用
枕头
库来完成吗


编辑: 它还可以处理如下图像:

我的代码将返回:


弄不明白为什么它的边缘会被像素化

只需将第二幅图像中不需要的像素设置为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)
从PIL导入图像
从PIL导入图像
root='/root/'
im1=Image.open(root+'1.jpg')
im2=Image.open(root+'2.jpg')
def非零(a):
如果a<10,则返回0
掩码=Image.eval(ImageChops.difference(im1,im2),非零)。转换('1')
im=Image.composite(im2,Image.eval(im2,lambda x:0),mask)

一个补丁版本会起作用吗-?不会。另外,它是
hello
red
这两个事实完全只是为了简单示例的目的,它可以是任何颜色和任何对象的集合。这是因为您使用jpg压缩来保存和加载图像,所以np.subtract不是减去原始值,但是压缩后的值会稍微偏离,导致Hello符号周围出现补丁。因此,要么使用loseless(png等),要么使用复杂的blob查找代码(不是np.subtract),它们不会被压缩为两个不同img的相同值。压缩取决于图像数据。@Maximilian您可以使用.png来消除压缩伪影;如果我没弄错的话,这是使用最广泛的无损格式。