본문 바로가기

Programming

OpenCV 프로젝트 소개

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

제목 그대로 재미있는 프로젝트 하나 소개시켜 드릴려고 합니다.

학부생 시절 영상 처리에 관심을 가지고 이것저것 많은 공부를 하였지요. 얼굴인식 관련 프로젝트도 진행해보고, 번호판 인식, 손 동작 인식도 해보고... 물론 영상처리 관련 대학원에 들어가서 수많은 프로젝트를 진행했습니다만, 해당 프로젝트는 학부생 시절 대회를 앞두고 진행 한 내용이었습니다. 참고하시기 바랍니다.



 

제가 소개드릴려고 하는 프로젝트는 어떻게 보면  패턴인식 일수도 있고, 간단한 영상처리 프로그래밍이 될 수도 있고... 뭐 생각하기 나름인데요. 일단 참고한 논문은 없었습니다.  아! 곤잘레스 영상처리 서적은 정말 미친듯이 봤었죠^^

(누구나 구현하고 응용할 수 있다는 말로 이해하시면 됩니다.^^)

 

이름 하야~ Laser Point Finder~ 입니다. 간단히 설명 드리자면 캠을 이용해 스크린 위의 레이저 포인터의 위치를 찾고 그에 따른 이벤트(사용자가 원하는 실행)를 실행시키는 프로그램입니다.

 

일단 동영상을 먼저 보시고 글을 읽으시면 편하실 듯 합니다.




구현에 대한 자세한 이야기는 안하려고 합니다. 저는 아이디어만 드릴려고 하는 것이기 때문에^^

 

 

자 한번 읽어보시고... 많은 아이디어를 구상해 보시길 바랍니다^^

========================================================================================

 

=============== 이미지 전처리 과정 =================

음 프로그램을 실행하면 카메라가 자동으로 시작됩니다카메라는 빔 프로젝트가 영상을 출력하는 배경을 향하고 있으며 좌우상하 모든 부분이 영상 안에 들어 오도록 합니다카메라는 초당 15프레임 이상의 영상을 연속적으로 가져오고 실시간 저장됩니다가장 먼저 수행 되는 작업은 이미지 속에서 실제 필요한 영역을 찾는 것이죠. (일단 빔 프로젝트에서 출력된 영상은 직사각형이며 가로세로 비율은 4:3으로 가정하였습니다.) 각 사각 영역의4개의 모서리 좌표를 찾고 실제 영상의 이미지를 모니터 화면 비율에 맞게 변환 후 저장하게 됩니다.

 

=============== 포인터 위치 검색 =================

본 이미지 처리 과정은 위 단계에서 저장된 이미지를 이용해 Laser Point 의 위치를 찾는 과정입니다카메라에서 출력된 후 저장 되는 이미지는 전 프레임 이미지와 현재 프레임 이미지입니다 2장의 이미지 변화 정보와 밝기 정보를 이용해 포인터의 위치를 검색합니다검색된 포인터의 위치는 일정 크기의 메모리 공간에 저장되고 저장된 자료를 분석하여 현재 프레임의 포인터 위치를 확정합니다.

 

=============== 이벤트 발생 =================

프로그램이 실행되는 동안 화면의 오른쪽 중단에는 이벤트를 발생시키는 다이얼로그가 출력되게 됩니다이는 사용자가 이벤트를 발생시키기 위해 Laser Point를 해당 버튼 위치에 옮겨야 이벤트가 발생되도록 구현하였습니다.이벤트의 종류는 크게 두 가지로 나뉘어 화면에 Laser Point 가 움직이는 방향으로 라인이 그려지게 되는 이벤트와 파워포인트 자료나 워드 자료의 이용을 위해 키보드의 PageUp PageDown이벤트를 발생 가능하도록 제작하였습니다.

 

========================================================================================

 

어떻게 보셨나요... 재미 있어 보이나요?

사실 위 프로젝트의 결과물은 위에 동영상을 찍었던 때보다 훨씬 프로그램이 커졌죠.

처음 이 프로젝트의 목표는 단지 레이저 포인터 위치 검색일 뿐이었습니다. 계속해서 업그레이드(?)를 하다 보면 목표가 바뀌기도 하고 더더욱 접근 하기도 하고..... 프로그램의 크기는 커지기 마련이겠죠.

 

이 카페에 올때마다 느끼는 점이지만... 많은 분들이 프로젝트를 준비하고 계시더군요.

저도 이렇다 할 결과를 가지고 있는 것은 아니지만 꼭 말씀드리고 싶은게 있습니다.

 

첫번째, 프로젝트를 시작하려면 일단 목표를 작게 잡으십시오. 예제를 찾으려 하지 마시고 필요한 기술(알고리즘)이 뭔지 찾아보세요. 그리고 그 부분을 공부하신 후 일단 생각한 방향대로 만들어 보세요. 창조적인 작업의 특징이 바로! 내가 생각하는 대로 만들 수 있다는거 아니겠습니까. (저는 프로그래밍을 창조적인 활동 이라고 생각하는 사람입니다^^)  저같은 경우 프로젝트 기간을 보통 6개월 잡았었는데 3개월은 잘못된 방향으로 나가서 그 알고리즘은 버리곤 하였습니다. 하지만 그 실수 덕분에 더 깔끔한 결과물이 나오는 경우가 대부분이었죠.

 

두번째, 일단 짜지 마시고 그리세요. 이게 무슨 말이냐 하면....

자신이 원하는 결과를 내기 위해 전처리(또는 중간과정)에서 어떠한 이미지 프로세싱을 거치게 할 것인지 미리 그려보고, 계산해보고, 손으로 만들어보고 코딩을 시작하라는 얘기입니다.

예를 들어 위 프로젝트 중간 과정중에... 포인트를 찾는다 하면... 먼저 앞 프레임 이미지와 다음 프레임 이미지의 차를 이용하면 점이 두개가 나오게 되겠지... 그리고 다름 이미지의 차를 또 구하면 움직이는 방향을 찾을 수 있겠지..... 라는....생각한 대로 한번에 성공하기는 하늘에 별따기죠~ 여러번 생각하고 다시짜고 테스트, 생각하고 다시짜고 테스트, 이 활동을 반복하면서 훨신 좋은 성능의 프로젝트를 완성하실 수 있을 것입니다. 무슨 얘긴지 아시겠죠? 아무튼...저는 프로젝트를 시작할때 항상 스케치북을 사서 매일 낙서(?)를 했답니다.ㅋㅋ 물론 이미지 프로세싱 과정뿐만 아니라 클래스의 구조, 상속도, 인터페이스 등등 아키텍쳐적인 부분도 손으로 그려보는게 많은 도움이 되더군요. 연습장이 좁아서 스케치북을 사용했습니다.^^

 

.....

아 많이도 주저리주저리 했군요..ㅎㅎㅎ

앞뒤 내용도 안맞고..ㅋㅋ다들 똑똑하시니깐~ 알아서 걸러 읽어주세요^^

 

대한민국이 영상처리 강국이 되기를 바라며...

 

저는 이만~

 



>> 해당 글은 2008년 작성된 글입니다. 궁금한 부분은 댓글로 부탁드립니다.


'Programming' 카테고리의 다른 글

WebDAV  (0) 2010.01.29
(초간단) 파일 쓰기 (연속쓰기)  (0) 2010.01.29
search folder or read folder  (0) 2010.01.29