[英]Similarity Measurement between Color Image (OpenCV)
我正在使用一個CBIR(基於內容的圖像檢索)項目,該項目將繪制圖像的RGB直方圖,並計算其他圖像與查詢圖像之間的距離。
我正在使用VS 2008 - MFC和OpenCV庫。 我想用來計算距離的方法是歐幾里德距離(ED),但不知怎的,我沒能解決它。
我找到了一個函數--cvCalcEMD2(),可以幫助我計算兩個直方圖之間的距離。 要使用此功能,我需要為直方圖創建簽名。
在For循環中,有一行我需要在直方圖中傳遞:
float bin_val = cvQueryHistValue_2D(hist1,h,s);
在我的直方圖函數中沒有類似變量h_bins和closesins的東西
在我的程序中,我將直方圖計算/繪制為R,G和B.意味着,每個圖像我都有3個直方圖。 例如:CvHistogram * hist_red,* hist_green,* hist_blue;
如何使用直方圖創建簽名?
*我的drawHistogram函數的鏈接在我的評論下面
這是我在我的項目中創建RGB hist簽名的代碼:在我的情況下,我需要簽名tu是一個浮點數組。
void makeColorSign(const IplImage* img,float** colorSign) {
unsigned int* N = Params::colorSignSize;
float* sign = (float*)malloc(N[0]*N[1]*3*sizeof(float));
IplImage* s = cvCreateImage(cvSize(N[0],N[1]),img->depth,img->nChannels);
cvResize(img,s,CV_INTER_NN);
RgbImage rgb(s);
for(unsigned int y=0; y<N[1]; ++y) {
for(unsigned int x=0; x<N[0]; ++x) {
unsigned int coord = (y*N[1]+x)*3;
sign[coord] = rgb[y][x].r;
sign[coord+1] = rgb[y][x].g;
sign[coord+2] = rgb[y][x].b;
}
}
*colorSign = sign;
cvReleaseImage(&s);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.