MFC | USB 카메라 영상을 Picture Control에 띄우기에서
GrapLoop함수에 몇줄을 추가하면 영상을 회전시킬 수 있다.
나는 Thread 밖에서 cam_rotate 변수를 0~3으로 바꾸어 주었고
cam_rotate변수 값에 따라서 각각 0도 90도 180도 270도 로 회전하도록 하였다.
90도와 270도로 회전한경우 영상 폭이 picture control 폭보다 작아져서 scale을 따로 조절해주었다.
cvWarpAffine 함수의 경우 첫번째인자가 회전된 영상, 두번째 인자가 회전시킬 영상이므로
회전 전, 후의 영상이 둘다 필요한 경우 IplImage 변수를 하나더 생성해서 따로 입력해주면된다.
UINT CWebCamera4Dlg::GrabLoop(void){ ... m_pImage = &IplImage(m_mImage); //Mat이미지->IPL이미지 /*-----------------------영상회전--------------------------*/ if(cam_rotate){ int w = m_pImage->width; int h = m_pImage->height; CvPoint2D32f center = cvPoint2D32f(w/2.0,h/2.0); CvMat *M = cvCreateMat(2,3,CV_32FC1); double angle = 90.0 * cam_rotate; double scale = 1; if (cam_rotate!= 2) scale = (double)(((double)w)/h); cv2DRotationMatrix(center,angle,scale,M); cvWarpAffine(m_pImage,m_pImage,M, CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,cvScalarAll(255)); cvReleaseMat(&M); } /*--------------------------------------------------------*/ pDC = this->m_vedio->GetDC(); // picture control의 DC얻어옴 this->m_vedio->GetClientRect(&rect); //picture control의 크기알아내기 m_cImage.CopyOf(m_pImage); //IPL이미지-> CVV이미지 m_cImage.DrawToHDC(pDC->m_hDC,rect);//CVV이미지를 DC에 그림 ReleaseDC(pDC);//가져온DC해제 ... }
※참고한 사이트
MFC | Picture Control을 이미지 파일로 저장하기 (0) | 2014.11.15 |
---|---|
MFC | Dialog 배경이미지 넣기 (0) | 2014.11.15 |
MFC | Picture Control을 버튼으로 사용하기 (0) | 2014.11.15 |
MFC | 이미지버튼 만들기 (0) | 2014.11.14 |
MFC | USB 카메라 영상을 Picture Control에 띄우기 (1) | 2014.11.14 |
MFC | OpenCV 개발환경 (0) | 2014.11.14 |
Tistory | 게시글 썸네일(Thumbnail) 지정하기 (0) | 2014.10.19 |
Tistory | 최근포스트(Recent Post) 접기 (0) | 2014.10.15 |