2008. 10. 3. 21:02

매트릭스 25영역 배열저장 및..출력



Release-tkss8329.zip 

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메인 함수내에 들어가면 값이 변하지??