2017-07-29 43 views
-4

我需要从Windows 10中的“资产”文件夹中复制图像,该图像具有自动下载的背景图像。其中一些图像将永远不会显示,并在某些时候被删除。为了确保在删除所有新图像之前看到了所有新图像,我创建了一个将这些图像复制到不同文件夹的Python脚本。为了高效,我需要一种方法来比较那些只复制新图像的图像。我需要做的就是让一个需要两个图像的功能与一个简单的方法进行比较,以确保两个图像在视觉上不相同。一个简单的测试就是将图像文件复制并将其与原件进行比较,在这种情况下,该功能应该能够辨别出这些图像是相同的。 如何比较python中的两个图像?我需要简单有效的方法来做到这一点。我读过的几个答案有点复杂。在Python中比较两个图像的简单方法

+1

你是什么意思的“比较”?完全像素值或具有不同质量的类似图像? – minhhn2910

+0

而比较功能只需要返回“相同”或“不同”? – minhhn2910

+0

我想你看到的复杂答案是比较实际的图像。你并不需要那样做。您只需测试两个文件是否包含完全相同的字节。而简单的做法是比较这些文件的哈希值。你可以使用(例如)标准'hashlib'模块的MD5或SHA-256。 –

回答

1

我以前也遇到过类似的问题。我使用PIL.Image.tobytes()将图像转换为字节对象,然后在字节对象上调用hash()并比较哈希值。

+0

从您的经历中,您是否遇到过这种情况无效? – Amani

+0

不,我只是用它来捕捉一些截图,并确保我不做重复的副本。除非你正在处理数十亿的图像,否则我不会担心碰撞。 – user2341726

+0

@Amani我强烈建议你使用'hashlib'中的加密哈希函数来代替这个哈希函数,而不是内置'哈希函数'来减少哈希冲突的机会。除非将图像文件转换为不同的图像文件格式,否则实际上不需要使用'PIL.Image.tobytes'。只需使用文件中字节的散列值。 –

0

在python比较两个图像

选项1: 使用ImageChops模块和它包含的数字算术图像操作的,所谓的信道操作(“印章”)。这些可以用于各种目的,包括特殊效果,图像合成,算法绘画等等。

实施例:

ImageChops.difference(图像1,图像2)⇒图像

返回两个图像之间的差异的绝对值。
出= ABS(图像1 - 图像2)

选项2:

Scikit-image为SciPy的图像处理工具箱。

在scikit-image中,请使用compare_ssim计算两个图像之间的平均结构相似性指数

参考文献:

Python Compare Two Images