C++ OpenCV:快速量化两幅图像之间的差异

C++ OpenCV:快速量化两幅图像之间的差异,c++,opencv,image-processing,C++,Opencv,Image Processing,我有两幅图像,我想知道它们在像素级和像素级上的差异有多大。我的基本想法是拍摄两幅图像,应用absdiff,然后对差异中的每个像素进行处理,获取其范数,并将范数存储在另一个数组中。这种方法的问题是对我的应用程序来说太慢了。有人知道有什么替代方案吗 非常感谢, 希拉里 计算标准差的代码: uchar* row_pointer_image_difference; double* row_pointer_normed_difference; Vec3b bgrPixel; double

我有两幅图像,我想知道它们在像素级和像素级上的差异有多大。我的基本想法是拍摄两幅图像,应用absdiff,然后对差异中的每个像素进行处理,获取其范数,并将范数存储在另一个数组中。这种方法的问题是对我的应用程序来说太慢了。有人知道有什么替代方案吗

非常感谢,

希拉里

计算标准差的代码:

  uchar* row_pointer_image_difference;
  double* row_pointer_normed_difference;
  Vec3b bgrPixel;
  double pixel_distance;

  for (long int r = 0; r < rows; r++){
      row_pointer_image_difference = image_difference.ptr<uchar>(r);
      row_pointer_normed_difference = normed_difference.ptr<double>(r);
      for (long int c = 0; c < columns; c++){
           //calculate pixel distance
           bgrPixel = row_pointer_image_difference[c];
           pixel_distance = norm(bgrPixel);
           row_pointer_normed_difference[c] = pixel_distance;
      }
  }
uchar*行指针图像差;
双*行\指针\规范\差;
Vec3b-bgrPixel;
双像素距离;
for(长整数r=0;r
为了查看可用的快捷方式,您需要更好地阐明您的用例。扪心自问:你用这种差异做什么?你能接受近似的差异吗?你只需要知道图像是否完全相等吗

另外,您希望优化什么计算时间?最坏的情况?一般?你能忍受计算时间的巨大差异吗

例如,如果您只对测试精确相等感兴趣,则在第一个差异处提前终止非常快,并且如果大多数图像彼此不同,则预期时间较短


如果预计重复部分较大,则随机像素采样可能是一种可行的方法,从采样率可以量化误报和漏报的可能性。

您如何传递这些阵列?如果您碰巧通过值传递大数组,您可能会考虑通过引用,这可能会快得多(无法从代码中识别)。否则,我看你不能避免逐像素比较。谢谢你的回复。数组是通过引用传递的。然后您可以考虑在OpenCL或CUDA中实现一些东西,不知道这是否是您的选择。我在你发布的代码中没有看到任何明显的优化。听起来不错。我来看看。谢谢你的考虑!