주제 : 영상처리를 이용한 마우스 구현
본 자료는 4페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
해당 자료는 4페이지 까지만 미리보기를 제공합니다.
4페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1. 주제선정 배경

2. 진행과정 흐름도

3. 각 과정에 대한 기본 내용설명

4. 마무리

5. 참고자료

본문내용

event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
mouse_event 함수의 첫 번째 인자가 아주 중요한 역할을 하게 된다. 클릭에 대한 메시지는 별 어려울게 없는데 포인터의 움직임에 대해서는 두 가지 좌표값에 대한 인자를 잘 설정해 주어야 했다. MOUSEEVENTF_ABSOLUTE와 MOUSEEVENTF_MOVE라는 것이 있는데 전자는 절대 좌표로 마우스 포인터를 이동 시켜 주는 것이고 후자는 상대적인 위치로 포인터를 이동 시켜주게 된다. 우리는 좌표를 위에서 언금한 것과 같이 넘겨받아 1024*768에 대한 크기로 매칭 시키는 것이므로 절대 좌표를 써야 했다. 그래서 MOUSEEVENTF_ABSOLUTE를 썼는데 무슨 이유인지 움직이지를 않아서 결국 MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE 이라는 인자 값을 전달함으로서 문제가 해결되었다.
mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,
(int)(yCenter*1024/160)*(65535/GetSystemMetrics(SM_CYSCREEN)) ,
abs(768-(int)(xCenter*768/120))* (65535 / GetSystemMetrics(SM_CXSCREEN)) ,0, 0);
※ 코딩은 클래스를 적극 활용
☞ 프로그램을 위해 필요한 데이터와 함수를 합체시킨 클래스를 어딘가에 작성해 두면 (필요하면 라이브러리로 해 두어도 된다) 간단히 방대한 기능을 금방 이용할 수 있게 된다. 이것은 프로그램 구성을 부품화 하는 중요한 역할을 하면서 프로그램의 명확성을 부여할 수 있게 된다.
사. 완성
각 클래스에 대한 설명은 위에서 하였다. 전체적인 흐름도를 순서도로 표시하면 위의 그림과 같다. 처음 카메라를 연결하고 카메라 연결 버튼은 누르면 영상을 입력 받는다. 그 영상을 이진화하고 잡음을 처리해서 원래 영상과 함께 화면에 뿌리게 된다. 그 상태에서 배경이 단순하고 조명이 적절한 배경을 찾아서 배경 설정버튼을 누르게 되면 다시 배경이 설정 되게 된다. 그리고 start 버튼을 누르면 손 모양의 위치에 대한 x, y좌표와 손의 모양에 대한 값을 CMouse 클래스에 콜백함수가 일정한 간격으로 리턴하고 그에 맞는 좌표와 버튼의 상태를 실행하게 된다. 종료 시에는 end 버튼을 누르면 마우스의 실행은 중지 되게 된다.
<프로그램 실행 모습>
4. 졸업 작품을 마무리하며…
처음 주제를 정할 때 어떤 쪽으로 방향을 정해야 할까 고민이 많았다. 여러 가지로 고민을 해보고 생각을 한 끝에 영상처리 쪽으로 방향을 잡고 주제를 고민하던 끝에 어느 선배가 작년에 이걸로 주제를 정하려다 다른 주제를 했다는 얘기를 듣고 괜찮은 아이템이다 생각이 들어 이 주제를 선정하게 되었다. 그러나 VC++에 대한 이해가 거의 전무한 두 명이였기 때문에 여러 가지 어려울 것이라고 예상을 했지만 한편으로는 이 기회에 프로그래밍 실력을 높일 수 있는 기회가 될 것이라는 생각도 들었다.
학기 중에는 진도가 잘 나가지 않았다. 학과 공부에 수업으로 시간을 내서 졸작에 대한 공부를 하고 프로그램을 짜는 것이 쉽지 않았다. 방학이 시작되고 본격적인 작업이 시작 되었다. 우선 카메라를 구입하고 프로그래밍을 시작했다. 카메라 연결을 하고 화면에 출력하는 과정도 쉽지 않았다. 단순히 출력만 하는 것이라면 여러 가지 책과 자료에 나와 있는 데로만 하면 되었지만 우리는 영상을 처리하고 처리하는 일도 같은 클래스에서 이루어져야 했다. 여러 책들을 찾아보고 영상이 출력되는 원리를 이해하고 코딩을 했다. 그리고 그 영상을 다시 이진화 해서 잡음 제거부분을 구현하게 되었다. 이 과정은 생각보다 쉽게 해결이 되었다. 모폴로지 기법을 써서 바이너리 영상을 화면에 뿌려 주었는데 생각보다 노이즈가 적고 원하는 영상을 얻을 수 있어서 기분이 상당히 좋았다. 그리고 영상 인식에 대한 여러 자료를 조사하다가 손동작 인식에 대한 저니키 모멘트에 대한 논문을 알게 되고 그것을 구현 하게 되었다. 여러 가지 자료와 논문을 읽으면서 그 내용을 아는 것보다 실제 프로그램으로 코딩해서 구현 한다는 것이 너무 어려웠다.
우리가 가장 애를 먹었던 부분은 마우스 이벤트에 대한 부분이었다. 여러 가지 VC++관련 책을 찾아보았는데 거기 나와 있는 마우스에 대한 내용은 실제로 우리가 구현하려는 내용과는 상당히 다른 것이었다. 실제로 마우스가 움직이고 버튼이 눌릴 때 발생하는 이벤트를 핸들링 하는 것이었는데 우리는 그와 반대로 특정 값을 구해서 마우스를 움직여야 했다. 그러던 중 mouse_event() 라는 함수를 알게 되었다. 우선 버튼의 상태에 대한 값들을 표현하고 실행 시켜봤더니 잘 동작하였다. 그러나 좌표를 이끌어 내는 과정에서 좌표값이 정확히 디텍팅이 안되었는데 그래서 다른 방법을 생각하게 되었다. RGB 를 HSI로 바꿔서 거기서 점을 추출하기로 했다. 좌표를 변환하고 거기서 나오는 색상 정보를 가지고 살색영역을 찾아서 디텍팅을 해보았는데 생각보다 좋은 결과가 나오지 않아서 그냥 원래 방법대로 하기로 하였다. 그래서 세밀하진 않지만 좌표값에 따라 포인트가 움직이고 버튼이 클릭되는 결과물을 만들게 되었다.
하나의 목표를 정하고 그것을 만들어내기까지 많은 시행착오와 여러 가지 힘든 점이 발생한다는 것을 이번 졸업 작품을 통해서 느꼈다. 처음에는 막막하고 어떻게 해야 할지 몰랐는데 그래도 조원끼리 상의하고 노력하니 조금 조금씩 무언가가 이루어 져가니 그런 과정도 기억에 남는다. 끝으로 지도 교수님인 김재훈 교수님 감사드립니다.
5. 참고자료
디지털 영상 처리의 구현 - 와이 미디어
윈도우 프로그래밍 - 한빛미디어
초보자를 위한 C++ - 인포북
visual c++ 5 - 곽용제 저
visual c++을 이용한 영상 처리 - 사이텍 미디어
기저함수의 대칭성을 이용한 저니키 모멘트의 효과적인 계산 방법 - 황선규, 김회율
캐릭터 이미지 검색을 위한 모양 기술자의 최적화 방법 - 신석환, 최민석, 이상윤, 김회율

키워드

  • 가격2,000
  • 페이지수14페이지
  • 등록일2006.09.25
  • 저작시기2006.9
  • 파일형식한글(hwp)
  • 자료번호#364951
본 자료는 최근 2주간 다운받은 회원이 없습니다.
다운로드 장바구니