gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:21:27 27 4
gpt4 key购买 nike

我正在用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com