Python PIL库中的ImageChops模块提供了一种对Image对象之间进行比较和图像处理的方法。其中,ImageChops.subtract(im1, im2, scale=1.0, offset=0.0)方法可用于将影像im2从影像im1中减去。
下面是subtract()方法的详细说明:
方法签名
ImageChops.subtract(im1, im2, scale=1.0, offset=0.0)
方法参数
- im1:被减数影像(必需)。
- im2:减数影像(必需)。
- scale:缩放比例,结果将乘以该比例(可选,默认为1.0)。
- offset:偏移量,结果将加上该偏移量(可选,默认为0.0)。
方法返回值
返回一个新的Image对象,该对象包含了两个输入图像像素值间的差值。
注意:当两个Image对象的格式、大小或模式有所不同时,该方法将抛出异常。
示例1
from PIL import Image, ImageFilter, ImageChops
im1 = Image.open("image1.png")
im2 = Image.open("image2.jpg")
# 计算im1中除了红色通道其他通道值减去im2的像素值得差值
im_diff = ImageChops.subtract(im1.convert('RGB').split()[1], im2.convert('RGB').split()[1])
# 对每个像素值的差值加上100并将范围限制到0-255
result_im = ImageChops.offset(im_diff, 100)
result_im = result_im.point(lambda x: 0 if x < 0 else x)
result_im = result_im.point(lambda x: 255 if x > 255 else x)
# 显示差异图
result_im.show()
上面的示例展示了从一个PNG文件和一个JPG文件中加载图像,并将两个图像中的绿色通道像素值相减得到一个差异图像。然后,将每个像素值加上100,并限制其范围在0-255之间,最后显示处理后的图像。
示例2
from PIL import Image, ImageFilter, ImageChops
im1 = Image.open("image1.png").convert("L")
im2 = Image.open("image2.jpg").convert("L")
# 计算两个灰度图像中每个像素点的差值
im_diff = ImageChops.subtract(im1, im2)
# 对每个像素值的差值取绝对值,然后保存为png文件格式
im_diff = im_diff.point(lambda x: abs(x))
im_diff.save("diff.png")
上面的示例展示了从一个PNG文件和一个JPG文件中加载灰度图像,并计算两个图像中的每个像素点的差值。然后,对每个像素点的差值取绝对值,并将处理后的结果保存为png文件格式。