

void CPracticeDlg::OnButton2()
{
UpdateData(TRUE);
int xx,yy; // 읽을 좌표값 저장...
xx=m_strx-1;
yy=m_stry-1;
if(m_strx!=0 && m_stry!=0 && m_strx<=5 && m_stry<=5){
IplImage* src=cvLoadImage("11.jpg",1);
IplImage* src2=cvLoadImage("33.jpg",1);
IplImage* dst_image=cvCreateImage(cvSize(src->width-src2->width+1,src->height-src2->height+1),IPL_DEPTH_32F,0);
IplImage* dst2=cvCloneImage(src);
IplImage* frame_copy2 = cvCreateImage( cvSize(src->width,src->height),IPL_DEPTH_8U, src->nChannels );
IplImage* frame_copy = cvCreateImage( cvSize(src->width,src->height),IPL_DEPTH_8U, src->nChannels );
if( src->origin == IPL_ORIGIN_TL ) {//Top-Left Origin
cvCopy( src, frame_copy2, 0 );
cvCopy( src, frame_copy, 0 );
}else{
cvFlip( src, frame_copy2, 0 );
cvFlip( src, frame_copy, 0 );
}
//상관계수를 이용하여 템플릿 매칭
cvMatchTemplate(src,src2,dst_image,CV_TM_CCOEFF_NORMED);
double min_val, max_val;
CvPoint max_val_pos, pos;
cvMinMaxLoc(dst_image, &min_val, &max_val, NULL, &max_val_pos); // 유사도가 최대인 위치 얻음
pos.x = max_val_pos.x + src2->width;
pos.y = max_val_pos.y + src2->height;
int aa,bb,result_x,result_y;
aa=pos.x - max_val_pos.x;
bb=pos.y - max_val_pos.y;
result_x=aa/5;
result_y=bb/5;
// CString assd; //인식한 이미지 시작원도우좌표
// assd.Format("%d,%d",result_x,result_y);
// AfxMessageBox(assd);
// ======================================================
for(int q=0; q<5; q++){
for(int w=0; w<5; w++){
// position[5][5]는 CPoint형으로 전역변수로 선언
// NULL값 자리까지 확보하여 [5][5]
position[q][w].x=max_val_pos.x+(result_x*w);
position[q][w].y=max_val_pos.y+(result_y*q);
// CString asd;
// asd.Format("%d,%d",postion[q][w].x,postion[q][w].y);
// AfxMessageBox(asd);
}
}
//======================================================
// 매트릭스 5*5 전체인식
IplImage* roi_image=cvCreateImage(cvSize(src2->width,
src2->height),src2->depth, src2->nChannels );
CvRect rect = {max_val_pos.x, max_val_pos.y, src2->width,
src2->height};
cvSetImageROI(frame_copy2, rect);
// 매트릭스 25영역 부분 인식
IplImage* roi_image2=cvCreateImage(cvSize(result_x,
result_y), src2->depth, src2->nChannels );
CvRect rect2 = {position[xx][yy].x, position[xx][yy].y,
result_x, result_y};
cvSetImageROI(frame_copy, rect2);
cvResize (frame_copy2, roi_image, CV_INTER_LINEAR);
cvResize (frame_copy, roi_image2, CV_INTER_LINEAR);
cvNamedWindow("template", CV_WINDOW_AUTOSIZE);
cvShowImage("template", roi_image2);
cvNamedWindow("dest2", CV_WINDOW_AUTOSIZE);
cvShowImage("dest2", roi_image);
cvReleaseImage(&roi_image);
}else{
AfxMessageBox("출력할 매트릭스 좌표를 입력하세요.");
}
}
PS. 에디터변수값이...왜?
CV메인 함수내에 들어가면 값이 변하지??