Python 使用PIL查找图像之间的差异
在图像处理中,找到两个图像之间的差异是各种应用中的一个关键步骤。了解这两个图像之间的差异是非常重要的,这可以帮助我们检测变化、识别物体和其他相关应用。在本博客中,我们将探讨如何使用Python Imaging Library (PIL) 找到两个图像之间的差异。
安装和语法
要使用PIL,我们需要使用pip包管理器进行安装。我们可以通过在终端中运行以下命令来安装PIL:
pip install pillow
使用PIL来找出两张图片之间的差异,我们可以使用ImageChops模块。 ImageChops 模块提供了对图片的各种操作,包括找到两张图片之间的差异。使用PIL找到两张图片之间差异的语法如下所示−
from PIL import Image, ImageChops
# find the difference
diff = ImageChops.difference(img1, img2)
# show the difference
diff.show()
步骤
- 导入所有必要的模块,例如用于图像比较的ImageChops模块和用于图像处理的PIL模块。
-
Image.open() 函数是PIL模块提供的函数,应该用它来打开需要比较的两张图片。
-
要确定两张图片之间的差异,使用 ImageChops.difference() 函数。此函数接收两个图像对象作为输入,在接收到输入后,返回一个表示两个输入图片之间每个像素差异的绝对值的新图像对象。
-
最终的图像将是灰度图像,白色像素表示两张照片之间的差异区域,黑色像素表示没有差异。
-
使用Image模块提供的 show() 函数显示差异图片。这将在一个新窗口中显示不同的图像。
-
Image模块的 save() 方法是一个可选的方式,可以将各种图片保存到文件中。此方法使用文件名和格式作为输入,将图片保存到选择的文件中。
注意 – 请记住,被比较的两张图片的大小和分辨率应该相同,否则差异图像可能无法准确表示两张图片之间的差异。
下载并将以下图片重命名为 beach.jpg和beach2.jpg
示例1
from PIL import Image, ImageChops
# open images
img1 = Image.open('image1.jpg')
img2 = Image.open('image2.jpg')
# find the difference
diff = ImageChops.difference(img1, img2)
# show the difference
diff.show()
这段代码打开两个图像, image1.jpg 和 image2.jpg ,并使用ImageChops.difference()方法找到它们之间的差异。然后使用show()方法显示 不同的 图像。
示例2
from PIL import Image, ImageChops
# open images
img1 = Image.open('beach.jpg')
img2 = Image.open('beach2.jpg')
# resize images
img1 = img1.resize((400, 400))
img2 = img2.resize((400, 400))
# find the difference
diff = ImageChops.difference(img1, img2)
# threshold the difference image
threshold = 50
diff = diff.point(lambda x: 0 if x < threshold else 255)
# show the difference
diff.show()
这段代码打开了两张图片,image1.png和image2.png,并将它们调整到 400×400 的大小。然后使用 ImageChops.difference() 方法找到这两张图片的差异。差异图像通过 point() 方法将阈值设为50。最后,使用show()方法显示差异图像。
应用
- 通过观察图片之间的差异,可以发现观察电影或照片中的变化。
-
它还可以用于发现和强调图像处理应用程序中的视觉变化,例如医学成像中用于定位肿瘤或其他异常情况的应用程序。
-
在法医调查中,比较监控录像可以帮助揭示嫌疑人或发现新证据,这种方法尤其有用。
-
此外,它也常用于现代应用程序中监测硬件并确定任何变化或故障。
结论
在本课程中,我们学习了如何使用Python的Python Imaging Library (PIL)来确定两张照片之间的差异。安装PIL和导入所需模块是第一步。然后,讨论了确定两张照片之间差异的两种方法-第一种方法是使用函数ImageChops.difference(),这是一种快速简便的确定两张图片之间差异的方法,第二种方法则是使用NumPy从两张照片中减去像素值,创建一个突出差异的新图片。最后,我们讨论了图片差异检测的一些潜在用途。