确定图像是不是相同,但大小不同

Posted

技术标签:

【中文标题】确定图像是不是相同,但大小不同【英文标题】:Determine if images are the same, but different sizes确定图像是否相同,但大小不同 【发布时间】:2011-10-21 11:36:00 【问题描述】:

我目前正在处理大量图像(超过 3000 张),每个图像都有两个副本;一大一小。问题是我没有任何链接来说明哪个小图像映射到哪个大图像。

我大致知道哪个大图像对应哪个小图像(我有一个数组,其中每个小图像最多包含 5 种可能性),我想循环数组并将每个大图像与小图像进行比较, 看看它是否是相同的图像但已调整大小。

TLDR/不明白:在 php 中有没有简单的方法来比较两个相同的图像,一个是(比如说)200x200,另一个是(比如说)500x500,并确定它们是否是一样的吗?

【问题讨论】:

图片格式是什么?图像是否保存到文件中? 所有图片均为JPG,保存在两个文件夹中;大大小小的。 【参考方案1】:

最简单的方法是将两者都调整为小尺寸(例如 16x16 或 32x32,具体取决于您要使用多少 CPU,在整个过程中跟踪每个文件的名称。

然后使用 imagecolorat() 来比较每一行/列的像素颜色。然后,您可以定义需要匹配的百分比以被视为同一张图片。

编辑:这是一个实现http://www.thismayhem.com/php/comparing-images-with-php-gd/的示例

【讨论】:

太棒了。我以此为基础,不得不进行一些调整,但你给了我想要的东西;一个起点:) 非常感谢。 您为什么不按照我在回答中的建议重新创建小图像?【参考方案2】:

您可以做的事情是,拍摄大图,将其缩放到小图的大小,然后检查那里的一些随机像素区域。如果图片真的不同,您可以使用类似 avg 的东西。两张图片的颜色。

但是这种方式真的很烂……

【讨论】:

【参考方案3】:

不,没有返回 true 或 false 的 same_image_but_in_different_sizes() 函数。

如果我是你,我要么手动排序,要么选择基于颜色直方图的方法。

我刚刚看到所有“图像都是 JPG,它们保存在两个文件夹中;大的和小的”。你为什么不把小东西扔掉然后重新创建它,但这次你记得哪个属于哪个?

【讨论】:

【参考方案4】:

我会使用 imagemagick 库来调整图像大小和比较图像。我会用exec() 来称呼它

首先,使用convert命令http://www.imagemagick.org/script/convert.php调整大图的大小

然后,使用compare 命令http://www.imagemagick.org/script/compare.php 将小图像与调整大小的图像进行比较

【讨论】:

【参考方案5】:

您是否尝试过调整大图像的大小 1 是否会创建与较小图像之一完全相同的图像(手动使用 Md5 来找出答案)。

如果是这样,那么您的解决方案是将较大的图像批量调整为 tmp 文件,然后 md5 它构建一个 bigimagemd5s 数组,然后您 md5 较小的图像。

此方法仅适用于使用 php GD 算法生成的小图像,并且您的压缩级别和大小与之前使用的相同。

【讨论】:

即使我这样做了,由于缩放算法,按比例缩小的大图像会有不同的 MD5。不幸的是,这不是一个选择。 这就是我说的,不用删分,这是一个解决方案,它在解决方案中写得很好,它不能工作,谢谢【参考方案6】:

手动对它们进行排序将花费您很多、更少的时间。

【讨论】:

【参考方案7】:

请查看此链接: Compare 2 images in php

似乎使用 ImageMagick 扩展是您最好的选择,尽管您可能必须先将较大的图像缩小到与较小的图像相同的大小。

【讨论】:

以上是关于确定图像是不是相同,但大小不同的主要内容,如果未能解决你的问题,请参考以下文章

使用位深度来确定 BMP 图像中颜色表的大小是不是有效?

CV2 光流函数不是确定性的

如何使用 Javascript/jQuery 确定图像是不是已加载?

如何使用 Javascript/jQuery 确定图像是不是已加载?

确定声学相似性的方法(但不是指纹)

在确定数组的大小时,括号会有所不同吗?