OpenCV中直方图对比

OpenCV中直方图对比

对于两幅图片先求得其直方图然后在对两个直方图进行比较。而两幅直方图相似度的标准为 d ( H 1 , H 2 ) \color{#f00}d(H1,H2) d(H1,H2),而对于该值的计算有四种方式:
相关性比较
卡方比较
十字交叉性
巴氏距离
而对于OpenCV来说已经提供了相应的API:

compareHist(
	输入直方图1,
	输入直方图2,
	选择使用的计算方式
);

具体的步骤:
a、将载入的图像从RGB转化为HSV
b、计算直方图并归一化处理
c、直方图比较
d、得到比较结果

#include "opencv2/opencv.hpp"

using namespace cv;
using namespace std;


int main()
{
    Mat src1,src2,temp;
    temp = imread("/home/dynamicw/Project/C++_Project/opencvtest/src/lesson01/source/src1.png");
    src2 = imread("/home/dynamicw/Project/C++_Project/opencvtest/src/lesson01/source/src2.png");
    src1 = Mat(temp.rows,temp.cols/2,temp.type());
    for(int row  = 0;row < temp.rows;row++)
    {
        for(int col = 0;col < temp.cols/2;col++)
        {
            src1.at<Vec3b>(row,col) = temp.at<Vec3b>(row,col);
        }
    }
    imshow("src1",src1);
    imshow("src2",src2);

    Mat src1_hsv,src2_hsv;
    cvtColor(src1,src1_hsv,CV_BGR2HSV);
    cvtColor(src2,src2_hsv,CV_BGR2HSV);

    imshow("src1_hsv",src1_hsv);
    imshow("src2_hsv",src2_hsv);

    int h_bins = 50,s_bins = 60;
    int histsize[] = {h_bins,s_bins};

    float h_range[] = {0,256};
    float s_range[] = {0,180};

    const float* ranges[] = {h_range,s_range};

    int channels[] = {0,1};
    Mat hist_src1,hist_src2;
    calcHist(&src1_hsv,1,channels,Mat(),hist_src1,2,histsize,ranges,true,false);
    normalize(hist_src1,hist_src1,0,1,NORM_MINMAX,-1,Mat());

    calcHist(&src2_hsv,1,channels,Mat(),hist_src2,2,histsize,ranges,true,false);
    normalize(hist_src2,hist_src2,0,1,NORM_MINMAX,-1,Mat());

    cout << "CV_COMP_CORREL" << CV_COMP_CORREL << endl;   
    cout << "CV_COMP_CHISQR" << CV_COMP_CHISQR << endl;
    cout << "CV_COMP_INTERSECT" << CV_COMP_INTERSECT << endl;
    cout << "CV_COMP_BHATTACHARYYA" << CV_COMP_BHATTACHARYYA << endl;



    for(int i = 0;i < 4;i++)
    {
        int mode = i;
        double value = compareHist(hist_src2,hist_src2,mode);
        cout << "the " << i << " mode is:" << value << endl;
 
    }

    waitKey(0);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值