【发布时间】:2016-10-18 08:12:12
【问题描述】:
我正在用 C++ 编写一个图像处理应用程序,需要比较图像。例如,我有两个数组如下:
int image1[] = {10, 20, 30, 40};
int image2[] = {40, 30, 20, 10};
我想找到一种比for 循环(如memcmp)更有效的比较方法。
【问题讨论】:
-
memcmp最终使用循环。 -
这两张图片相等吗?它们的尺寸 WxH 是多少?
-
您认为这可以如何优化?如果我有两张完全相同的图像,但对于随机位置的一个像素,显然我必须在最坏的情况下搜索整个图像。您可以做的是确保以正确的方式读取数据(对于内存缓存和处理器矢量比较能力)并对其进行并行化。几纳秒的剃须。但这没有必要,如果它们不是特别大,简单地比较它们是在眨眼之间完成的。如果您需要阅读并保存它们,无论如何这将花费最长的时间。
-
@Evgeniy,图像的内容是平等的。但一个是颠倒的,镜像另一个。尺寸为 2048x2048。
-
精确算法需要比较所有像素,因此您需要完整的图像 for-loop。但您可以先尝试比较 N 个随机(或固定位置)像素,以确定您的图像是否可能不同。如果 N 个随机像素相等 - 进行全面比较以做出最终决定。
标签: c++