c++ - 比较BGR图像是否完全相同

标签 c++ opencv

<分区>

我正在尝试编写代码来确定两个图像是否相同。我能够以 BGR 的形式读取图像,并且能够从一个中减去另一个。我需要检查一下,看看差异是否只包含零。我知道有一个名为 countNonZero 的函数,但它只适用于单 channel ,而不是 3 channel 。我的一个解决方案是遍历整个矩阵并检查所有内容是否为零,但这太慢了。有什么有效的检查方法吗?下面是我的代码。

int main(int argc, char** argv)
{
  if(argc != 3)
  {
    printf("usage: DisplayImage.out <testImg.png> <copy.png>\n");
    return -1; 
  }

  Mat image;
  Mat copy;
  Mat output;

  image = imread(argv[1], 1); 
  copy = imread(argv[2], 1); 

  absdiff(image, copy, output);

  if(countNonZero(output) == 0)
  {
    cout << "Same" << endl;
  }
  else
  {
    cout << "Different" << endl;
  }

  imshow("outut", output);
  waitKey();
  return 0;
}

最佳答案

你可以这样做:

Mat diff_im = image - copy;
double s = cv::sum(diff_im)[0];

关于c++ - 比较BGR图像是否完全相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56799363/

相关文章:

c++ - 蚊子 : publish message to broker

c++ - 如何从迭代器中获取列表

python-3.x - 如何使用相机矩阵在图像中以毫米为单位查找点的位置?

java - 跟踪增强型 Android 应用程序的标记。哪个图书馆?

python - OpenCV + Python-NameError:名称 'imSize'未定义

c++ - 试图理解 boost 示例 httpserver3。 shared_ptr 重置方法不清楚

c++ - 使用对的矩阵乘法

c++ - 使用另一个线程停止 scanf 等待输入

c++ - 如何填充 Vec3b 数组

opencv - 如何刷新显示的窗口?