2011-02-09 128 views
1

我正在尋找一種方法來比較2個圖像並獲得最匹配的圖像作爲輸出。 使用直方圖功能OpenCV我可以這樣做嗎?OpenCV中的直方圖函數

任何人都可以幫我嗎?

但是我不知道該怎麼做,因爲我對OpenCV不太瞭解。 謝謝。

+0

比較圖像的相似性是非平凡的。你比較什麼樣的圖像,它們是如何相關的? – 2011-02-09 17:52:41

回答

2

直方圖將只是確保兩個圖像具有相似的顏色分佈。顏色分佈在非常不同的圖像中可能是相似的。

作爲一個例子,想象一個黑色和白色的8x8檢查板和一個圖像,其左側全黑,乘坐側爲純白色。這些圖像具有相同的直方圖。

0

如果你的目標是找到最匹配的圖像,然後OpenCV有一個函數cvMatchTemplate()這樣做。是否使用直方圖匹配,但不需要在代碼中聲明其他任何內容。可以找到最符合要匹配的模板和文檔中可用的其他變體的圖像部分。

0

對於每一個圖像計算HSV直方圖:

Mat src_mat = imread("./image.jpg"); 
Mat hsv_mat; 
cvtColor(src_mat, hsv_mat, CV_BGR2HSV); 
MatND HSV_histogram; 
int histSize[] = { 240, 240 }; 
float h_ranges[] = { 0, 255 }; 
float s_ranges[] = { 0, 180 }; 
const float* ranges[] = { h_ranges, s_ranges }; 
int channels[] = { 0, 1 }; 
calcHist(&hsv_mat, 1, channels, Mat(), HSV_histogram, 2, histSize, ranges, true, false); 
normalize(HSV_histogram, HSV_histogram, 0, 1, NORM_MINMAX, -1, Mat()); 

然後進行兩兩比較,並得到一個相似性得分:

double score_ij = compareHist(HSV_histogram_i, HSV_histogram_j, CV_COMP_BHATTACHARYYA); 

您可以通過將圖像中較小的區域增加你的準確度和平均結果。