python:如何检查具有不同像素化的两个图像的相似性

You*_*cef 5 python image-comparison image-processing user-profile image-scaling

我正在运行python代码来检查Quora和Twitter用户个人资料照片的相似性,但是当图像相同时我没有得到正面的结果。

这是用于比较两个图像的代码:

path_photo_quora= "/home/yousuf/Desktop/quora_photo.jpg"
path_photo_twitter="/home/yousuf/Desktop/twitter_photo.jpeg"
if open(path_photo_quora,"rb").read() == open(path_photo_twitter,"rb").read():
     print('photos profile are identical')
Run Code Online (Sandbox Code Playgroud)

尽管图像相同,但控制台未打印“照片配置文件相同”,我该怎么办?

Håk*_*Lid 9

您可以使用imagehash库比较相似的图像。

from PIL import Image
import imagehash
hash0 = imagehash.average_hash(Image.open('quora_photo.jpg')) 
hash1 = imagehash.average_hash(Image.open('twitter_photo.jpeg')) 
cutoff = 5

if hash0 - hash1 < cutoff:
  print('images are similar')
else:
  print('images are not similar')
Run Code Online (Sandbox Code Playgroud)

由于图像不完全相同,因此会有一些差异。但是即使重新调整图像大小,压缩图像,使用不同的文件格式或调整了对比度或颜色,imagehash仍然可以使用。

哈希(或指纹)实际上是从图像的8x8单色缩略图派生的。但是,即使样本减少了,相似度比较也可以得出非常准确的结果。调整截止值,以在假阳性和假阴性之间找到可接受的平衡。

  • 不在图书馆本身。您必须使用“requests”之类的内容通过 http 下载图像。这只是几行代码。/sf/answers/2300150331/ (4认同)
  • 有没有一种方法可以在线操作这些图像而无需下载它们?即给出代码图像的 url 而不是本地路径? (2认同)
  • 如果您使用我链接到的代码,图像将仅在内存中处理。它们不会存储到您的驱动器中,除非您明确这样做。 (2认同)
  • @MDP,是的。因为图像在散列之前会调整为相同的小尺寸。通常为 8x8 像素。 (2认同)
  • 对于 8x8 像素或 64 位的哈希/指纹/位图,距离 5 意味着两个哈希中的 64 位中有 5 个不同。这是一篇文章,解释了图像哈希算法的工作原理,并包含示例图像。https://content-blockchain.org/research/testing- Different-image-hash-functions/ (2认同)

pla*_*ker 8

这两个图像并不相同——只是所成像的东西不同。正如您自己所注意到的,这些图像显然大小不同。因此,比较必定失败。

您需要采用某种相似性检查。第一步是将较小的图像放大到较大的图像。然后您需要采用某种方法来检测和定义相似性。有不同的方式和方法,它们的任何组合都可能是有效的。

例如,请参阅使用 OpenCV 检查图像的相似性