2012-04-17 7 views
0

두 개의 이미지 "U"가 있습니다. cvMatchTemplate 함수를 사용하여 유사성을 비교했습니다. 그런 다음 cvMinMaxLoc 함수를 사용하여 픽셀의 최대 값과 최소값 및 해당 위치를 찾습니다. 그러나 그들을 비교할 때 문자 "Q"로 최대 값을 반환하며 최대 값과 최소값은 동일합니다. 나는 무엇이 문제인지 여기에서 이해하지 않는다? ??? 이미지의 크기가 동일합니다. 내 코드는 다음과 같습니다cvMatchTemplate으로 결과를 가져올 수 없습니까?

IplImage* gray1[1]; 
IplImage* grayThresh1[1]; 

에 :

#include "cv.h" 
#include "cxcore.h" 
#include "highgui.h" 
#include <iostream> 
#include <stdio.h> 

using namespace std; 
using namespace cv; 
int main() 
{ 
    char text[]={'Q','U'}; 
     IplImage * tmp[2];  
     tmp[0]=cvLoadImage("D:\\Standards\\u.bmp",1); 
     tmp[1]=cvLoadImage("D:\\Standards\\q.bmp",1); 

     IplImage* src; 
IplImage* dst; 
IplImage* gray; 
IplImage* grayThresh; 
IplImage* gray1[1]; 
IplImage* grayThresh1[1]; 
int threshold = 120, maxValue = 255; 
int thresholdType = CV_THRESH_BINARY; 

src = cvLoadImage("D:\\OU.bmp", 1); 
gray = cvCreateImage(cvSize(src->width,src->height), IPL_DEPTH_8U, 1); 
cvCvtColor(src, gray, CV_BGR2GRAY); 
grayThresh = cvCloneImage(gray); 
cvThreshold(gray, grayThresh, threshold, maxValue, thresholdType); 

for(int i=0;i<=1;i++){ 
gray1[i] = cvCreateImage(cvSize(tmp[i]->width,tmp[i]->height), IPL_DEPTH_8U, 1); 
cvCvtColor(tmp[i], gray1[i], CV_BGR2GRAY); 
grayThresh1[i] = cvCloneImage(gray1[i]); 
cvThreshold(gray1[i], grayThresh1[i], threshold, maxValue, thresholdType); 
} 
CvPoint  minloc, maxloc; 
     double  minval, maxval; 

     int iwidth = grayThresh1[0]->width - grayThresh->width + 1; 
     int iheight =grayThresh1[0]->height - grayThresh->height + 1; 
     IplImage *res=cvCreateImage(cvSize(iwidth,iheight),32,1); 

     for(int i=0;i<=1;i++){ 
    cvMatchTemplate(grayThresh,grayThresh1[i],res,CV_TM_CCORR_NORMED); 
    cvMinMaxLoc(res, &minval, &maxval, &minloc, &maxloc, 0); 
    cout<<text[i]<<" maxval="<<maxval<<" minval="<<minval<<endl;} 

cvDestroyWindow("grayThresh"); 
cvDestroyWindow("src"); 
cvDestroyWindow("dst"); 
cvDestroyWindow("grayThresh1"); 
cvReleaseImage(&src);  
cvReleaseImage(&grayThresh); 
cvReleaseImage(&dst); 
for(int i=0;i<=1;i++) 
cvReleaseImage(&grayThresh1[i]); 
return 0; 
} 
+0

코드 서식을 수정하십시오 - 그것은 (디버그에 따라서 하드 등) 읽기 매우 어렵다 현재 형태로 –

답변

0

당신은 변경해야

IplImage* gray1[2]; 
IplImage* grayThresh1[2]; 
관련 문제