본문 바로가기

영상처리

경과 시간 계산 및 일정시간이상 일정 범위 안의 좌표에 있으면 클릭 경과 시간 계산은 크게 어렵지 않았다. 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.. 더보기
RGB->YCbCr->이진화 우선 설 전날, PlayGameForm에 OpenCV 변수들을 다 때려 박아 넣었던 걸레같은 소스를 수정했다. 다시 차근차근 Class화를 시도한 결과, 성공ㅋ 그렇게 삽질할땐 안되더니ㅠ 설 당일은 좀 쉬고, 오늘 다시 YCbCr로 변환하고 이진화를 시키려고했더니, 역시 만만치 않았다. OpenCV고수들은 걍 뚝딱 하겠지?ㅠ 우선 YCbCr로 변환하는건 확실히 성공했는데, 이진화가 된 영상이 [YCbCr->이진화] 로 된건지, 바로 그냥 [RGB->이진화] 가 된건지 헛갈린다-_- 그리고 영상이 살짝 뚝뚝 끊기는 느낌도 들고, 메모리 체크를 해 봤더니, 들쑥날쑥한다. 계~~속 오르기만 하면 메모리 누수가 확실하지만, 이렇게 들쑥날쑥 하는 경우는 당췌 뭔지-_-a void PlayGameForm::OnPa.. 더보기
OpenCV로 영상 출력 성공, 하지만.. 앞에 설계에서 나타냈듯이, OpenCV로 화면출력하는데 필요한 함수나 변수들을 Camera 라는 Class에 넣고, 가져다 사용하는 식으로 구현을 하려고했다. 하지만 뭐가 문제인지, 로직상에는 문제가 없는데, 영상을 받아오자마자 이런 에러 메시지가 출력되면서 스택 오버플로우가 발생하였다. 하루 꼴딱 이 에러녀석과 싸우다가, 그냥 인터넷에 올라와있는 수많은 예제들 처럼 Form Class에 public으로 변수선언 해버리고 그냥 사용을 했더니 성공-_-;;;;;;;;; 아.......어이없어....... 어디가 잘못된 것일까.... 일단 마감일에 압박 때문에, Class화는 기능 구현이 다 된 후에 다시 하기로 하고 일단 Class diagram을 수정하였다. 아...그런데 이렇게 해버리니, 설계에 의한 .. 더보기