OpenCV cvMatchTemplate相同的图像大小
我目前正试图找到两个1×1图像之间的归一化互相关。所以为了做到这一点,我使用了cvMatchTemplate。但是在使用cvMinMaxLoc之后,对于任何2个1乘1的图像,maxval始终返回1.00000 所以我尝试在6×3图像和3×3图像上使用cvMatchTemplate来绕过这个问题。对于每个原始像素,我将其扩展为6×3和3×3,以查看这是否能提供更好的结果。没有。maxval仍然返回1.000000。有没有更好的方法找到2像素之间的NCCOpenCV cvMatchTemplate相同的图像大小,opencv,Opencv,我目前正试图找到两个1×1图像之间的归一化互相关。所以为了做到这一点,我使用了cvMatchTemplate。但是在使用cvMinMaxLoc之后,对于任何2个1乘1的图像,maxval始终返回1.00000 所以我尝试在6×3图像和3×3图像上使用cvMatchTemplate来绕过这个问题。对于每个原始像素,我将其扩展为6×3和3×3,以查看这是否能提供更好的结果。没有。maxval仍然返回1.000000。有没有更好的方法找到2像素之间的NCC cvSetImage
cvSetImageROI(img, cvRect(curWidth, curHeight, 1, 1));
IplImage* tempROI = cvCreateImage(cvSize(1, 1), img->depth, img->nChannels);
cvCopy(img, tempROI);
cvResetImageROI(img);
IplImage* currentROI = cvCreateImage(cvSize(6,3), img->depth, img->nChannels);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 6; j++) {
cvSetImageROI(currentROI, cvRect(j, i, 1, 1));
cvCopy(tempROI, currentROI);
cvResetImageROI(currentROI);
}
}
cvReleaseImage(&tempROI);
cvSetImageROI(opp_img, cvRect(opp_loc, curHeight, 1, 1));
tempROI = cvCreateImage(cvSize(1, 1), opp_img->depth, opp_img->nChannels);
cvCopy(opp_img, tempROI);
cvResetImageROI(opp_img);
IplImage* centerROI = cvCreateImage(cvSize(3,3), opp_img->depth, opp_img->nChannels);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cvSetImageROI(centerROI, cvRect(j, i, 1, 1));
cvCopy(tempROI, centerROI);
cvResetImageROI(centerROI);
}
}
IplImage *re = cvCreateImage(cvSize(4, 1), IPL_DEPTH_32F, 1);
cvZero(re);
cvMatchTemplate(currentROI, centerROI, re, CV_TM_CCORR_NORMED);
cvMinMaxLoc(re, &minval, &maxval, &minloc, &maxloc);
cvSetImageROI(img,cvRect(curWidth,curHeight,1,1));
IplImage*tempROI=cvCreateImage(cvSize(1,1),img->depth,img->nChannels);
cvCopy(img,tempROI);
CVR图像ROI(img);
IplImage*currentROI=cvCreateImage(cvSize(6,3),img->depth,img->nChannels);
对于(int i=0;i<3;i++){
对于(int j=0;j<6;j++){
cvSetImageROI(currentROI,cvRect(j,i,1,1));
cvCopy(tempROI,currentROI);
cvResetImageROI(currentROI);
}
}
cvReleaseImage(&tempROI);
cvSetImageROI(opp_img,cvRect(opp_loc,curHeight,1,1));
tempROI=cvCreateImage(cvSize(1,1),opp\u img->depth,opp\u img->nChannels);
cvCopy(opp_img,tempROI);
cvResetImageROI(opp_img);
IplImage*centerROI=cvCreateImage(cvSize(3,3),opp\u img->depth,opp\u img->nChannels);
对于(int i=0;i<3;i++){
对于(int j=0;j<3;j++){
cvSetImageROI(centerROI,cvRect(j,i,1,1));
cvCopy(tempROI、centerROI);
cvResetImageROI(centerROI);
}
}
IplImage*re=cvCreateImage(cvSize(4,1),IPL_DEPTH_32F,1);
cvZero(re);
cvMatchTemplate(当前ROI、中心ROI、re、CV\u TM\u CCORR\u NORMED);
cvMinMaxLoc(re,&minval,&maxval,&minloc,&maxloc);
可以对1×1图像或任何具有相同图像大小的图像执行NCC,但通常不有用。如果在图像I中搜索模板T,结果将是尺寸为I-T+1的R,因此如果图像大小相同,结果为1x1。如果在任何具有该大小(1x1)的图像中搜索最小-最大位置,它将按预期返回1.000。检查归一化互相关背后的数学。您会发现,在1*1图像的情况下,您将始终获得1.0 NCC-NCC的主要思想是忽略强度差异。
对不起,我的问题中有一个输入错误。maxval返回1.0000而不是maxloc。这会改变什么吗?或者1.000在直觉上仍然有意义吗?如果我比较两个1乘1的图像,我希望maxval在-1和1之间。