生活随笔
收集整理的这篇文章主要介绍了
OpenCV中直方图对比
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
OpenCV中直方图对比
对于两幅图片先求得其直方图然后在对两个直方图进行比较。而两幅直方图相似度的标准为d(H1,H2)\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;
}
总结
以上是生活随笔为你收集整理的OpenCV中直方图对比的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。