opencv 直方图比较

前言

在中详细讲解了图像直方图,图像直方图比较是度量两张图像相似度的一种手段。为了比较两个直方图(H1和H2),首先我们必须选择一个度量(d(H1,H2))来表示这两个直方图的匹配程度。OpenCV提供了4种不同的指标来计算匹配:
相关性Correlation ( HISTCMP_CORREL):
在这里插入图片描述
在这里插入图片描述
N是N是直方图bin的总数。

Chi-Square ( HISTCMP_CHISQR)
在这里插入图片描述
Intersection ( method=HISTCMP_INTERSECT)
在这里插入图片描述
Bhattacharyya distance ( HISTCMP_BHATTACHARYYA)
在这里插入图片描述

opencv 函数支持

函数原型:

CV_EXPORTS_W double compareHist( InputArray H1, InputArray H2, int method );

参数说明:
H1:第一个要比较直方图。
H2: 第二个要直方图,与H1相同大小。
method :比较的方法,参见#HistCompMethods,对于Correlation and Intersection方法,度量值越高,匹配越准确。Square 和Bhattacharyya distance 则相反。

代码示例:

    cv::Mat image = cv::imread("D:\\QtProject\\Opencv_Example\\Hist\\Hist.png", cv::IMREAD_GRAYSCALE);
    if (image.empty()) {
      cout << "Cannot load image" << endl;
      return;
    }
    imshow("image",image);

    const int bins[1] = { 256 };
    float hranges[2] = { 0,255 };
    const float* ranges[1] = { hranges };

    Mat hist;
    // 计算直方图
    calcHist(&image, 1, 0, Mat(), hist, 1, bins, ranges);
    normalize(hist, hist, 0, 1, NORM_MINMAX, -1, Mat()); //将数据规皈依到0和1之间

    cv::Mat imageCvert;
    image.convertTo(imageCvert, -1, 1, 50);
    imshow( "imageCvert", imageCvert);
    Mat histCompare;
    calcHist(&imageCvert, 1, 0, Mat(), histCompare, 1, bins, ranges);
    normalize(histCompare, histCompare, 0, 1, NORM_MINMAX, -1, Mat()); //将数据规皈依到0和1之间


   double CORREL = compareHist( hist, histCompare, HISTCMP_CORREL );
   double CHISQR = compareHist( hist, histCompare, HISTCMP_CHISQR );
   double INTERSECT = compareHist( hist, histCompare, HISTCMP_INTERSECT );
   double BHATTACHARYYA = compareHist( hist, histCompare, HISTCMP_BHATTACHARYYA );
   cout << "HISTCMP_CORREL:" << CORREL<<endl
        <<  "HISTCMP_CHISQR:"  << CHISQR << endl
        << "HISTCMP_INTERSECT:" << INTERSECT << endl
        << "HISTCMP_BHATTACHARYYA:" << BHATTACHARYYA << endl;

比较的两张图像:
在这里插入图片描述
运行结果:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值