当前位置:   article > 正文

opencv图片比较大法_opencv图像对比

opencv图像对比
  • 本程序做什么?

  • 加载基准图像和另一张做对比

  • 将图像转换到HSV格式。

  • 计算所有图像的H-S直方图,并归一化以便对比。

  • 显示计算所得的直方图相似度数值。

  1. void CompareHist()
  2. {
  3. imshow("input1", image);
  4. imshow("input2", temp);
  5. Mat hsv1, hsv2;
  6. cvtColor(image, hsv1, COLOR_BGR2HSV);
  7. cvtColor(temp, hsv2, COLOR_BGR2HSV);
  8. int h_bins = 60; int s_bins = 64;
  9. int histSize[] = { h_bins, s_bins };
  10. float h_ranges[] = { 0, 180 };
  11. float s_ranges[] = { 0, 256 };
  12. const float* ranges[] = { h_ranges, s_ranges };
  13. int channels[] = { 0, 1 };
  14. Mat hist1, hist2;
  15. calcHist(&hsv1, 1, channels, Mat(), hist1, 2, histSize, ranges, true, false);
  16. calcHist(&hsv2, 1, channels, Mat(), hist2, 2, histSize, ranges, true, false);
  17. normalize(hist1, hist1, 0, 1, NORM_MINMAX, -1, Mat());
  18. normalize(hist2, hist2, 0, 1, NORM_MINMAX, -1, Mat());
  19.     //4 种比较方法
  20. for (int i = 0; i < 4; i++)
  21. {
  22. int compare_method = i;
  23. double src1_src2 = compareHist(hist1, hist2, compare_method);
  24. qDebug() << " Method" << i << ": src1_src2:" << src1_src2;
  25. printf(" Method [%d] : src1_src2 : %f \n", i, src1_src2);
  26. }
  27. waitKey(0);
  28. }
  1. void calcHist(const Mat * images,
  2.                 int nimages,
  3.                 const int* channels,
  4.                 InputArray mask,
  5.                 OutputArray hist,
  6.                 int dims,
  7.                 const int* histSize,
  8.                 const float** ranges,
  9.                 bool uniform = true,
  10.                 bool accumulate = false);

images:输入的图像的指针;

nimages:输入图像个数;

channels:需要统计直方图的第几通道;

mask:掩模,mask必须是一个8位(CV_8U)的数组并且和images的数组大小相同;

hist:直方图计算的输出值;

dims:输出直方图的维度(由channels指定);

histSize:直方图中每个dims维度需要分成多少个区间(如果把直方图看作一个一个竖条的话,就是竖条的个数);

ranges:统计像素值的区间;

uniform = true:是否对得到的直方图数组进行归一化处理;

accumulate = false:在多个图像时,是否累积计算像素值的个数;

方法1:Correlation ( CV_COMP_CORREL )

相关性比较,取值范围[0,1],越接近1,直方图相似度越高

方法2:Chi-Square ( CV_COMP_CHISQR )

卡方检验,取值范围[0,1],越接近0,直方图相似度越高

方法3:Intersection ( method=CV_COMP_INTERSECT )

相交,取值高,直方图相似度越高

方法4:Bhattacharyya distance ( CV_COMP_BHATTACHARYYA )

巴氏距离在直方图比较中效果最佳,完全匹配为1,完全不匹配为0

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/103686?site
推荐阅读
相关标签
  

闽ICP备14008679号