如何通过memcmp比较两个图像x轴翻转哪一个 我在C++中编写了一个图像处理应用程序,需要比较图像。例如,我有两个数组,如下所示: int image1[] = {10, 20, 30, 40}; int image2[] = {40, 30, 20, 10};

如何通过memcmp比较两个图像x轴翻转哪一个 我在C++中编写了一个图像处理应用程序,需要比较图像。例如,我有两个数组,如下所示: int image1[] = {10, 20, 30, 40}; int image2[] = {40, 30, 20, 10};,c++,C++,我想找到一种比for循环(比如memcmp)更有效的比较方法 您需要从某个地方获取大小,然后您可以memcmp它们: size_t size = 4; int image1[] = {10, 20, 30, 40}; int image2[] = {40, 30, 20, 10}; if(!memcmp(image1, image2, sizeof(int) * size)) //equal 不过,在这种情况下,请注意。从您的问题来看,您不清楚是要比较两个图像/int数组是否相等,还是要检

我想找到一种比
for
循环(比如memcmp)更有效的比较方法

您需要从某个地方获取大小,然后您可以
memcmp
它们:

size_t size = 4;
int image1[] = {10, 20, 30, 40};
int image2[] = {40, 30, 20, 10};
if(!memcmp(image1, image2, sizeof(int) * size))
  //equal

不过,在这种情况下,请注意。

从您的问题来看,您不清楚是要比较两个图像/int数组是否相等,还是要检查其中一个是否是另一个的翻转版本

在任何情况下,您都应该避免过度优化和使用
memcmp
等函数。从复杂性的角度来看,与
for
-循环没有区别:将优化留给编译器,让代码易于阅读和维护

要检查一个数组是否为另一个数组的翻转版本,可以使用以下代码:

int image1[] = {10, 20, 30, 40};
int image2[] = {40, 30, 20, 10};
int len = 4;
bool equal = true;
for (int i = 0; i<len; i++) {
    if (image1[i] != image2[len-i-1]) {
        equal = false;
        break;
    }
}
intimage1[]={10,20,30,40};
int image2[]={40,30,20,10};
int len=4;
布尔等于真;

对于(int i=0;i
memcmp
最终使用了一个循环。这两个图像是相等的?它们的尺寸WxH是多少?你认为这可以如何优化?如果我有两个完全相同但在随机位置有一个像素的图像,显然我必须在最坏的情况下搜索整个图像。你可以做的是确保数据以正确的方式读取(对于内存缓存和处理器向量比较能力)并将其平行化。只需几纳秒。但没有必要这么做,如果它们不是非常大的话,只需在眨眼之间进行比较。如果你需要读取和保存它们,无论如何这将花费最长的时间。@Evgeniy,图像的内容是相等的。但是一个图像是颠倒的,并镜像到另一个图像上尺寸为2048x2048。精度算法需要比较所有像素,因此循环需要完整图像。但您可以尝试比较N个随机(或固定位置)首先是像素,以确定图像是否不同。如果N个随机像素相等,则进行完全比较以做出最终决定。是的,我只对图像进行一次比较。然后坚持for循环方法。