우선 설 전날, 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 |