生活随笔
收集整理的這篇文章主要介紹了
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中直方图对比的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。