cvMatchTemplate得分

时间:2012-01-03 22:31:48

标签: objective-c opencv

我正在使用openCV的cvMatchTemplate方法在较大的图像中查找较小的图像。下面的\方法是将现有的图案对象与给定的“当前”图像匹配,找到的图案由当前图像上绘制的矩形标记。当模式可见时,它可靠地找到它,而不是它的绘图某处“ random ”这是有道理的。

我无法计算模板匹配的分数。有一个容易确定吗?我在不同的网站上寻找,但找不到解决方案,也一直在查看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 个答案:

答案 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
}