iphone - 比较2个UIImage对象

标签 iphone ios objective-c uiimage compare

我在stackowerflow上已阅读了很多有关该解决方案的问题和答案,但仍然找不到可以帮助解决我的问题的解决方案。

所以我有2个非常大的图像,我需要比较它们。

图像不是使用imageNamed:创建的,因此它们不会兑现,因此[image1 isEqual:image2]不起作用。

据我了解,比较它们的唯一解决方案是:

- (BOOL)image:(UIImage *)image1 isEqualTo:(UIImage *)image2
{
    return [UIImagePNGRepresentation(image1) isEqual:UIImagePNGRepresentation(image2)];
}

但是图像的尺寸确实很大,因此需要一些时间进行比较。

是否有任何属性可以帮助您不要使用上面的方法检查它们是否相等?

例如,我可以获取image1.size并将其与image2.size进行比较,如果它们不相等,则无需运行上述方法。有任何想法吗?谢谢。

最佳答案

如果您需要比较像素相等而不是指针的图像,则可以执行以下操作:

您可以在创建每个图像时为其创建某种哈希。例如,
所有像素值(可能是一些模的取模;也许是由像素位置决定的)。

然后,将该值存储在NSDictionary[image] = hashValue中。然后,当您比较图像时,如上所述,首先比较它们的大小,然后,如果它们相等,则从字典中比较它们的哈希值。

如果它们相等,则图像很可能相等,但是您必须手动检查图像以确保100%保证。

手动检查可能会花费一些时间,因此您可以通过发明自己的统计信息(例如更多的哈希,不同的模数,哈希值的哈希值,最左上角像素的值(填充,但保留)来降低发生碰撞的可能性(当不同的图像具有相同的哈希值时)。谁知道...)等。

显而易见,拥有的统计数据越多,冲突就越少。
实验领域:)

否则,就这样比较它们的指针地址

if(image1 == image2) { 
     ...
}

关于iphone - 比较2个UIImage对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15389693/

相关文章:

ios - 为 appstore 提交版本控制 ios 应用程序

objective-c - 我的循环有什么问题 - 循环浏览 View

ios - 相机如何跟踪两件事? cocos2d

iphone - 使用 OpenCV 裁剪图像

iphone - UILabel 超出应用程序框架

iPhone 应用程序运行了数百次,然后在启动时因内存错误而崩溃,然后直到重新启动才运行 - 为什么?

ios - 同一应用中的 Google Maps SDK 和 Mapkit 导致崩溃

iphone - OpenCV 人脸检测 - vector 问题

ios - 如何在选择时禁用单元格的颜色

ios - NSMutableAttributedString斜体和粗体不能同时工作