본문 바로가기

MFC

증강현실을 MFC로 이식 성공 무한 삽질 끝에 AR을 우리 소스에 이식하는데 성공하였다. 하지만 불안사항이 있다. 일시 정지 버튼을 누르면 불규칙적인 확률로 다운되는 현상이 있고, AR을 합치고나서부터 게임 시작을 했다가, 창을 닫고 다시 시작을 누르면 검은 화면이 나온다. 랭킹 구현도 다 했고... 이제 OpenGL을 사용해서 Picking하는 작업이 남았는데 제일 만만찮은 작업이 될것 같다. ARToolKit 관련 소스들도 클래스화 시켜야 되고... 그런데 ARToolKit 정말 너무 까다롭다-_- 다시는 증강현실에 발을 들여놓기가 싫다. 설정하다가 진땀 다 뺄듯 더보기
MFC Dialog 에서 Enter 와 ESC Key 종료 방지 BOOL PlayGameForm::PreTranslateMessage(MSG* pMsg) { if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) { return TRUE; } return CDialog::PreTranslateMessage(pMsg); } 더보기
경과 시간 계산 및 일정시간이상 일정 범위 안의 좌표에 있으면 클릭 경과 시간 계산은 크게 어렵지 않았다. void PlayGameForm::OnBnClickedButtonStart() { this->tStartTime = CTime::GetCurrentTime();// 현재 시간을 얻어온다. SetTimer(TIMER, 1000, NULL);// 1초마다 호출한다. this->cameraManager->Create(ComparePoint, this->cameraManager); this->cameraManager->threadState = true; } void PlayGameForm::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == CAMERA) { this->cameraManager->GetCamera().cvQueryFrame_ip.. 더보기
MFC에서 Client 중복 실행 방지하는 방법 BOOL CARPuzzleApp::InitInstance() { CheckOverlapRun (); return FALSE; } void CARPuzzleApp::CheckOverlapRun () { CWnd* pWnd = NULL; pWnd = CWnd::FindWindow(NULL, _T("사천성 ver 0.5 - Title")); if(pWnd) // 중복 실행이 되었을 경우 { // 중복 실행 중인 프로그램 화면에 표시 pWnd->ShowWindow(SW_SHOW); pWnd->SetForegroundWindow(); } else { // 레지스트리 등록 ::GetClassInfo(AfxGetInstanceHandle(), "#32770", &wc); wc.lpszClassName = "사천성 v.. 더보기
영상 속도가 느린 이유 이틀동안 영상 속도가 느려서 고민했는데, 정말 뜻밖의 곳에서 해결책을 찾았다. 필터링을 하면서 많이 느려졌고, Thread 보다는 OnTimer로 호출하는게 더 빨랐다. 그리고 이진화 할때 YCbCr값 중에서 Y값은 설정을 안했는데, 같이 설정해주니까 (당연히) 색깔 검출이 잘 되었다. 지금 화면이 팽창->침식->팽창 연산만 하고 라벨링 이라던지 열림 연산이라던지 다 뺐다. 어차피 마커가 인쇄된 흰 종이를 수직으로 비추면서 시연할테니까, 이런 필터링들이 없어도 깨끗하게 잘 추출하더라. 이제 좌표값 얻어와서 포인트 잡아주는 일 남았구나. void CameraManager::AddEffect () { IplConvKernel *element = cvCreateStructuringElementEx(2, 2, .. 더보기
영상처리를 이용한 붉은색 검출 우선 붉은 색 검출에 성공을 하긴 했는데 속도가 느리다. 한눈에 '느리다' 라는 느낌이 든다. OnPaint 함수를 사용해서 OpenCV관련 처리들을 해주는데, OnPaint함수 특성상 계~속 호출이 되기 때문에 발생하는 현상같다. 이제 코드를 모두 Thread화 시키는 작업을 하고, 색 추적 구현을 해야겠다. void CameraManager::FindRedColor (CDC** pDC_YCbCr, CStatic *yCbCrCam) { CRectrect; int x, y; this->camera.Create_ipl_YCbCr_Image(); this->camera.Create_ipl_bin_Image(); this->camera.Create_RGB_Image(); this->camera.Create_Y.. 더보기
RGB->YCbCr->이진화 우선 설 전날, PlayGameForm에 OpenCV 변수들을 다 때려 박아 넣었던 걸레같은 소스를 수정했다. 다시 차근차근 Class화를 시도한 결과, 성공ㅋ 그렇게 삽질할땐 안되더니ㅠ 설 당일은 좀 쉬고, 오늘 다시 YCbCr로 변환하고 이진화를 시키려고했더니, 역시 만만치 않았다. OpenCV고수들은 걍 뚝딱 하겠지?ㅠ 우선 YCbCr로 변환하는건 확실히 성공했는데, 이진화가 된 영상이 [YCbCr->이진화] 로 된건지, 바로 그냥 [RGB->이진화] 가 된건지 헛갈린다-_- 그리고 영상이 살짝 뚝뚝 끊기는 느낌도 들고, 메모리 체크를 해 봤더니, 들쑥날쑥한다. 계~~속 오르기만 하면 메모리 누수가 확실하지만, 이렇게 들쑥날쑥 하는 경우는 당췌 뭔지-_-a void PlayGameForm::OnPa.. 더보기