우선 설 전날, PlayGameForm에 OpenCV 변수들을 다 때려 박아 넣었던 걸레같은 소스를 수정했다.
다시 차근차근 Class화를 시도한 결과, 성공ㅋ
그렇게 삽질할땐 안되더니ㅠ
설 당일은 좀 쉬고, 오늘 다시 YCbCr로 변환하고 이진화를 시키려고했더니, 역시 만만치 않았다.
OpenCV고수들은 걍 뚝딱 하겠지?ㅠ
우선 YCbCr로 변환하는건 확실히 성공했는데,
이진화가 된 영상이 [YCbCr->이진화] 로 된건지, 바로 그냥 [RGB->이진화] 가 된건지 헛갈린다-_-
그리고 영상이 살짝 뚝뚝 끊기는 느낌도 들고,
메모리 체크를 해 봤더니, 들쑥날쑥한다.
계~~속 오르기만 하면 메모리 누수가 확실하지만,
이렇게 들쑥날쑥 하는 경우는 당췌 뭔지-_-a
void PlayGameForm::OnPaint() { CPaintDC dc(this); // OpenCV Start if (!IsIconic()) { if( this->cameraManager->GetCamera().Get_ipl_OriginalImage() ) { CDC* pDC; CDC* pDC_YCbCr; CRect rect; int x, y; // Original Image Start pDC = originalCam.GetDC(); originalCam.GetClientRect(&rect); x = rect.top; y = rect.left; rect.SetRect(x, y, x + CAM_WIDTH, y + CAM_HEIGHT); cvGrabFrame( *(this->cameraManager->GetCamera().Get_m_pCapture()) ); // Camera로 부터 Frame을 받아 옴 this->cameraManager->GetCamera().cvRetrieveFrame_OriginalImage(); // Camera로 부터 Frame을 받아 옴 this->cameraManager->GetCamera().Get_cvv_OriginalImage().CopyOf ( this->cameraManager->GetCamera().Get_ipl_OriginalImage() ); this->cameraManager->GetCamera().Get_cvv_OriginalImage().DrawToHDC(pDC->m_hDC, rect); // Original Image End // YCbCr Change Start this->cameraManager->GetCamera().Create_ipl_YCbCr_Image (); cvCvtColor( this->cameraManager->GetCamera().Get_ipl_OriginalImage(), this->cameraManager->GetCamera().Get_ipl_YCbCr_Image(),CV_BGR2YCrCb ); // YCbCr Change End // 이진화 Start pDC_YCbCr = yCbCrCam.GetDC(); yCbCrCam.GetClientRect(&rect); x = rect.top; y = rect.left; rect.SetRect(x, y, x + CAM_WIDTH, y + CAM_HEIGHT); this->cameraManager->GetCamera().Create_ipl_gray_Image(); cvCvtColor(this->cameraManager->GetCamera().Get_ipl_YCbCr_Image(), this->cameraManager->GetCamera().Get_ipl_gray_Image(), CV_RGB2GRAY); // gray Image를 흑백으로 치환 cvThreshold(this->cameraManager->GetCamera().Get_ipl_gray_Image(), this->cameraManager->GetCamera().Get_ipl_gray_Image(), this->cameraManager->GetCamera().GetThreshold(), 255, CV_THRESH_BINARY); // gray Image를 이진화 this->cameraManager->GetCamera().Get_cvv_bin_Image().CopyOf ( this->cameraManager->GetCamera().Get_ipl_gray_Image() ); this->cameraManager->GetCamera().Get_cvv_bin_Image().DrawToHDC(pDC_YCbCr->m_hDC, rect); // 이진화 End // 할당 해제 originalCam.ReleaseDC(pDC); yCbCrCam.ReleaseDC(pDC_YCbCr); this->cameraManager->GetCamera().Get_cvv_OriginalImage().Destroy(); this->cameraManager->GetCamera().Get_cvv_bin_Image().Destroy(); this->cameraManager->GetCamera().Release_ipl_YCbCr_Image(); this->cameraManager->GetCamera().Release_ipl_gray_Image(); ReleaseDC(pDC_YCbCr); ReleaseDC(pDC); } } // OpenCV End }
'Project > 증강현실을 이용한 사천성' 카테고리의 다른 글
영상처리를 이용한 붉은색 검출 (8) | 2010.02.17 |
---|---|
AR을 이용한 사천성 알 출력 (0) | 2010.02.17 |
OpenCV로 영상 출력 성공, 하지만.. (0) | 2010.02.10 |
2010년 2월 9일 설계 (4) | 2010.02.09 |
VS2008에서 OpenCV 1.1 설정 방법 (4) | 2010.02.02 |