如果分辨率更改,则查找相似图像[重复]
Posted
技术标签:
【中文标题】如果分辨率更改,则查找相似图像[重复]【英文标题】:Find similar image if resolution was changed [duplicate] 【发布时间】:2021-11-19 03:12:23 【问题描述】:如果存在 GIF 格式的网页横幅,我正在使用 python 检查数百个网站。 我有一个包含 gif 文件作为示例的文件夹,我将每个网站的 gif 文件与我自己的示例文件进行比较。 我使用 filecmp,但我发现许多网站压缩 gif 文件,因此即使文件在视觉上相同,filecmp 也不会检测到相同。 是否有任何 python 库可以检测两个 gif 文件或视频是否相似,即使分辨率发生了变化?
【问题讨论】:
【参考方案1】:比较两个图像的相似性是一个常见的图像处理问题,因此您开发的解决方案可以根据您的需要简单或复杂。在您的具体情况下,您需要一种使两个图像大小相同的方法以及一种比较图像的方法。
首先,您可能希望将图像转换为 RGB 或灰度数组以进行比较。
我建议将较大图像的大小减小到较小图像的大小。与增加较小图像的大小相比,这不太可能引入伪影。可以使用 Python Pillow 库来调整大小。
Image.resize(size, resample=None, box=None, reducing_gap=None)
https://pillow.readthedocs.io/en/stable/reference/Image.html
重采样方法可能对相似性度量有一些小的影响。但是,您可能只需使用 resample = NEAREST 就可以了。
确保图像大小相同后,必须进行比较。可以使用均方误差 (MSE) 或结构相似性 (SSIM) 来比较它们。幸运的是,SSIM 已经在 scikit-image 中实现了。
from skimage.metrics import structural_similarity as ssim
s = ssim(imageA, imageB)
https://www.pyimagesearch.com/2014/09/15/python-compare-two-images/?_ga=2.129476107.608689084.1632687977-376301729.1627364626
在您的情况下,MSE 可能同样有效。但是,如果图像的平均亮度因某种过程而改变,您需要先从每张图像中减去它。
如果调整大小是唯一的问题,那应该是它。但是,如果图像可能已被翻转、旋转或裁剪,则可能需要执行其他步骤。
【讨论】:
很好的方法,我使用的是 MSE,但是 resize 和 skimage 这两种方法都减少并简化了我的代码,谢谢以上是关于如果分辨率更改,则查找相似图像[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Javascript检测屏幕分辨率,更改css,相应裁剪图像