본문 바로가기

Project/증강현실을 이용한 사천성

AR Puzzle 기능 추가 영상 근 2년만에 소스 꺼내서 이것저것 기능 추가했음 ㅎㅎ 더보기
Visual studio 2008에서 OpenGL 적용 법 1) C:\Program Files\Microsoft Visual Studio 9.0\VC\include 에 gl 폴더를 생성하고, gl.h glaux.h glu.h glut.h (3- Header 폴더내의 파일)넣는다. 2) C:\Program Files\Microsoft Visual Studio 9.0\VC\lib 에 OPENGL32.lib GLAUX.lib, GLU32.lib, GLUT32.lib GLUT.lib (2- Lib 폴더내의 파일) 을 넣는다.. 3) C:\Windows\System32 에 3-Header 폴더내의 파일을 넣는다. 더보기
OpenGL을 이용한 Picking 성공 일단 방금 기능구현이 막 끝난 참이라 부가기능 구현도 안되어있고 여러가지 자잘한 버그도 수정이 안되어있다. 게임 실행창을 닫아서 메인 창으로 갔다가, 다시 게임 실행창을 켰을때 화면이 검게 나오는 이유는, ARToolKit에서 제공해주는 프레임을 얻어오는 함수를 거치면서 화면이 검게되는것을 확인하였다. 어디서부터 손을 대야할지 막막하다-_-a 이걸 어떻게 고치지....ㅠ 더보기
증강현실을 MFC로 이식 성공 무한 삽질 끝에 AR을 우리 소스에 이식하는데 성공하였다. 하지만 불안사항이 있다. 일시 정지 버튼을 누르면 불규칙적인 확률로 다운되는 현상이 있고, AR을 합치고나서부터 게임 시작을 했다가, 창을 닫고 다시 시작을 누르면 검은 화면이 나온다. 랭킹 구현도 다 했고... 이제 OpenGL을 사용해서 Picking하는 작업이 남았는데 제일 만만찮은 작업이 될것 같다. ARToolKit 관련 소스들도 클래스화 시켜야 되고... 그런데 ARToolKit 정말 너무 까다롭다-_- 다시는 증강현실에 발을 들여놓기가 싫다. 설정하다가 진땀 다 뺄듯 더보기
경과 시간 계산 및 일정시간이상 일정 범위 안의 좌표에 있으면 클릭 경과 시간 계산은 크게 어렵지 않았다. 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.. 더보기
빨강 추적 분명 중심도 구하고 cvCircle 함수도 썼는데 왜 안되나 했었더니, 원본 영상 이미지를 다시 출력해주는걸 깜박했다ㅋㅋ 이런 어이없는 실수를 ㅋㅋ void CameraManager::DrawCircle () { int i = 0; int j = 0; int counter = 0; CvPoint m_ptRed = cvPoint(0, 0); CRect rect; int x, y; this->pDC = this->originalCam->GetDC(); //Picture Box의 영역을 구함 this->originalCam->GetClientRect(&rect); x = rect.top; y = rect.left; rect.SetRect(x, y, x + CAM_WIDTH, y + CAM_HEIGHT); //.. 더보기
영상 속도가 느린 이유 이틀동안 영상 속도가 느려서 고민했는데, 정말 뜻밖의 곳에서 해결책을 찾았다. 필터링을 하면서 많이 느려졌고, 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.. 더보기
AR을 이용한 사천성 알 출력 사천성 판이 4x4라면, 마커가 16개가 필요한게 아닌가 라는 생각을 했었다. 마커를 여러개 사용해 버리면 인식률 문제도 있고, 조작함에 있어서 마커를 가려버릴 경우에도 문제가 생겨서 어떻게 할지 고민을 많이 했었는데 뜻밖에도 마커 하나에 배열을 이용하여 여러개를 띄울수도 있었다! 배열을 사용하기 때문에 각 배열칸 별로 이벤트도 줄수 있을꺼라 생각한다. (아직 시도를 안해봐서 장담은 못하겠다.) 일단 OpenGL로 알을 드로잉 했는데, 여기서 좀 더 다듬으면 그럴듯한 사천성 판을 출력할수 있을듯 하다. 더보기
RGB->YCbCr->이진화 우선 설 전날, PlayGameForm에 OpenCV 변수들을 다 때려 박아 넣었던 걸레같은 소스를 수정했다. 다시 차근차근 Class화를 시도한 결과, 성공ㅋ 그렇게 삽질할땐 안되더니ㅠ 설 당일은 좀 쉬고, 오늘 다시 YCbCr로 변환하고 이진화를 시키려고했더니, 역시 만만치 않았다. OpenCV고수들은 걍 뚝딱 하겠지?ㅠ 우선 YCbCr로 변환하는건 확실히 성공했는데, 이진화가 된 영상이 [YCbCr->이진화] 로 된건지, 바로 그냥 [RGB->이진화] 가 된건지 헛갈린다-_- 그리고 영상이 살짝 뚝뚝 끊기는 느낌도 들고, 메모리 체크를 해 봤더니, 들쑥날쑥한다. 계~~속 오르기만 하면 메모리 누수가 확실하지만, 이렇게 들쑥날쑥 하는 경우는 당췌 뭔지-_-a void PlayGameForm::OnPa.. 더보기