2012-01-03 78 views
0

我使用openCV的cvMatchTemplate方法在較大的圖像中查找較小的圖像。下面的\方法將現有的模式對象與給定的「當前」圖像進行匹配,找到的模式由當前圖像上繪製的矩形標記。當模式可見時,它可以可靠地找到它,當它不是繪製在某處時「隨機」這是有道理的。cvMatchTemplate得分

我無法計算模板匹配的分數。有一個容易確定嗎?我正在尋找各種網站,但無法找到解決方案,並一直在尋找由cvMinMaxLoc計算出的值,但無法找到確定匹配質量的方法。

- (void)detect:(IplImage *)current 
{ 
int patchx = pattern->width; 
int patchy = pattern->height; 
int iwidth = current->width - patchx + 1; 
int iheight = current->height - patchy + 1; 

IplImage *result=cvCreateImage(cvSize(iwidth,iheight),IPL_DEPTH_32F, 1); 
cvMatchTemplate(current, pattern, result, CV_TM_SQDIFF ); 

CvPoint  minloc, maxloc; 
double  minval, maxval; 

cvMinMaxLoc(result, &minval, &maxval, &minloc, &maxloc, 0); 

/* draw red rectangle */ 
cvRectangle(current, 
      cvPoint(minloc.x, minloc.y), 
      cvPoint(minloc.x + patchx, minloc.y + patchy), 
      cvScalar(0, 255, 0, 0), 1, 0, 0); 
} 

回答

1

使用賦範度量信息,如CV_TM_CCORR_NORMEDCV_TM_SQDIFF_NORMED和最小值與閾值(0和1.0之間)。

cvMatchTemplate(current, pattern, result, CV_TM_SQDIFF_NORMED); 

if (minval < THRESHOLD) { 
    /* draw red rectangle */ 
    cvRectangle(current, 
      cvPoint(minloc.x, minloc.y), 
      cvPoint(minloc.x + patchx, minloc.y + patchy), 
      cvScalar(0, 255, 0, 0), 1, 0, 0); 
} else { 
    //not found 
} 
+1

謝謝,只是讓代碼更加完整以供參考。 cvMatchTemplate(current,pattern,result,CV_TM_SQDIFF); CvPoint minloc,maxloc; double minval,maxval; cvMinMaxLoc(result,&minval,&maxval,&minloc,&maxloc,0); if(minval 2012-01-04 13:48:30