c++ - 如何通过 memcmp 比较两个图像,其中一个进行 x 轴翻转

标签 c++

我正在用 C++ 编写图像处理应用程序,需要比较图像。例如,我有如下两个数组:

int image1[] = {10, 20, 30, 40};
int image2[] = {40, 30, 20, 10};

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

最佳答案

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

在任何情况下,您都应该避免过度优化 并使用像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;
    }
}

您可以做的另一件事是将图像哈希 与图像一起存储,并仅比较图像哈希。但它有一些缺点:

  1. 如果您只使用图像进行一次比较,则不会节省时间,因为散列需要读取整个数组,就像直接比较一样。
  2. 散列法不会 100% 保证您的平等,因为存在固有的冲突。它们的数量取决于所用散列函数的质量。
  3. 要对翻转图像使用哈希,您还需要生成图像翻转版本的哈希并将其用于比较。

关于c++ - 如何通过 memcmp 比较两个图像,其中一个进行 x 轴翻转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40102941/

相关文章:

c++ - 如何检查和处理非常接近于零的数字

c++ - 我如何将字符串中的每个字符更改为不同的颜色而不是整个字符串

c++ - 使用 Eigen 密集矩阵数据结构时应该期待什么?

c++ - 用于分析 bool vector 的 vector 的动态规划

c++ - 我可以将 stoi 与 GCC 4.4.7 编译器一起使用吗?

c++ - 将内存缓冲区写入 std::stringstream

c++ - 析构函数删除函数中的拷贝返回动态结构

c++ - 错误 : too few template-parameter-lists

c++ - 持有对 Derived 的引用的基类

c++ - 我应该使用一类函数还是函数的命名空间?