본문 바로가기

opencv

(15)
[OpenCV] OpenCV 카메라 화면 크기 제어하기 강좌 (소스포함) OpenCV 로 입력받은 PC 카메라의 크기를 제어하는 방법입니다. 숫자키 1, 2, 3, 4, 5 를 번갈아 눌러보시면 화면이 조절 되는 것을 보실 수 있습니다. 소스 (2) (T9-ScreenSize(2).zip) 에서는 + 키를 누르면 윈도우 크기를 크게, - 키는 작게 하는 기능도 추가되어 윈도우 크기를 자유롭게 조절 가능합니다. VIEW_WIDTH 와 VIEW_HEIGHT 숫자를 변경하면 화면 크기가 변경됩니다. cvNamedWindow( WIN_NAME1, 0 ); cvResizeWindow( WIN_NAME1, VIEW_WIDTH, VIEW_HEIGHT ); 윈도우 크기를 변경하였으니 뿌려주는 이미지 크기도 아래와 같이 변경해야 겠지요. // View 크기만큼 확장 if(!view_image..
[OpenCV] OpenCV 를 이용한 Hough Transform 중급강좌 Hough Transform 이란 영상에 있는 점들이 이루는 직선들 중 가장 많이 겹치는 부분을 추출하는 변환규칙입니다. 수학이 힘을 발휘하는 부분으로서 간단하게 (x, y) 를 (a, b) 라 하고 새로운 좌표계에 y' = ax' + b 를 그리면 여러개의 직선들이 존재하게되는데 이중 가장 많은 직선이 지나는 점 (x', y') 를 다시 (x, y) 좌표계로 변환하면 점들이 지나는 직선을 구해낼 수 있는 규칙입니다. 정말로 간단하면서도 신기하지요. OpenCV 에는 간단하게 cvHoughLines2() 함수를 제공하고 있고요. 코딩에는 Media Systam Lab. 의 서종훈 연구원(flamme4u) 님이 수고해 주셨습니다. 제가 연구실 세미나 때 제가 발표했던 자료 중 핵심 입니다. 핵심을 정리하면..
[OpenCV] 윤곽(contour) 추출, 에지(edge) 추출 중급강좌 다음은 윤곽(contour) 또는 에지(edge)를 찾는 주요 함수 부분에 대한 설명입니다. 윤곽선을 찾는 방법에는 1차 미분, 2차 미분, 템플릿 매칭(Template matching), 로버츠(Roberts), 소벨(Sobel), 라플라시안(Laplacian) 등이 있는데 그중 라플라시안 방법 중 한가지를 사용하였습니다. 윤곽 부분을 추출하기 위하여 이미지의 3 x 3 픽셀에 마스크(mask)를 씌워 계산후 중앙 픽셀의 값을 결정하게 됩니다. 즉, 아래와 같은 3 x 3 픽셀을 보고 특정 값이 들어가 있는 마스크를 곱하여 p5 를 계산하게 되는데 p1 p2 p3 p4 p5 p6 p7 p8 p9 특정 값을 넣은 3 x 3 마스크는 다음과 같이 정의 합니다. -1 -1 -1 -1 8 -1 -1 -1 -1..
[OpenCV] OpenCV 를 이용한 영상 이진화(Binarization) 초급강좌 오늘은 손쉽게 구현할 수 있는 영상 이진화(Binarization)에 대해서 설명해 드리도록 하겠습니다. 영상 이진화란 RGB 값으로 다양하게 분포되어 있는 색상값을 0 과 1 만의 값으로 표현하는 것 입니다. 실제적으로는 RGB 컬러 영상에을 흑백(Gray channel)영상으로 바꾼뒤 특정 임계값(Threshold)을 기준으로 초과 값은 255 로, 이하 값은 0 변환하게 되지요. 아래 T9-camera 윈도우 영상과 T9-output 윈도우 영상을 보시면 쉽게 이해가 가실 겁니다. T 값 128 을 기준으로 초과값은 255 로 변환되어 흰색으로 보여지고 있고 이하 값은 0 으로 변환되어 검은색으로 보여지고 있습니다. - 실행 결과 소스 코드가 다소 길어 졌지만 크게 보면 카메라를 입력 받는 소스에서..
[OpenCV] OpenCV 기초강좌 - 2편 : 카메라 입력받기 이번 강좌에서는 OpenCV 를 이용하여 간단하게 카메라 영상을 입력받아 IplImage 형 구조체에 넣고 출력 윈도우의 크기를 조절해서 화면에 보여주는 작업을 할 것입니다. 1편을 통하여 기본적인 셋팅 방법은 습득 하셨을테니 바로 아래와 같은 소스코드를 작성한 후 컴파일 해 봅시다. - 소스 코드(압축 파일 첨부) #include #include void main() { IplImage* image = 0; CvCapture* capture = cvCaptureFromCAM(0); cvNamedWindow( "T9-camera", 0 ); cvResizeWindow( "T9-camera", 320, 240 ); while(1) { cvGrabFrame( capture ); image = cvRetrie..
[OpenCV] OpenCV 기초강좌 - 기본 셋팅 소스 for VC++ 6.0 & VS.Net OpenCV 기본 셋팅을 해놓은 Workspace 입니다. Visual C++ 6.0 버전과 Visual Studio .Net 버전 둘다 가능합니다. Debug 모드, Release 모드, 각각 Link 항목에 cxcore.lib, cv.lib, highgui.lib 을 추가하고 cpp 소스 파일에는 "cv.h", "highgui.h" 가 include 되어있어 다운 받아 추가 코딩 부분만 작성해 나가기만 하면 별도의 기초 셋팅 없이 작업 할 수 있어 편리합니다. - 기본 셋팅에 대한 강좌는 아래 링크를 참고하세요. http://cafe.naver.com/opencv/1 - OpenCV 개발자 모임 http://opencv.co.kr
[OpenCV] OpenCV 기초강좌 - 1편 : 설치하기 OpenCV 초보를 위한 강좌 1편 OpenCV 는 인텔에서 만든 강력한 영상처리 라이브러리입니다. 강력한 기능과 성능에도 불구하고 3D 의 오픈소스 라이브러리인 OpenGL 처럼 알려지지도 않고, 활발하게 개발되지도 않고, 자주 쓰이지도 않아 안타까운 심정입니다. 더욱이 국내에는 아직 활성화된 커뮤니티가 없어 자료를 구하기도 어려운 실정입니다. 그리하여 본인이 자료를 수집하고 공부하는 과정에서 부딪친 문제점들의 해결방법들과 습득한 지식들을 강좌를 통해 풀어나가 보려고 합니다. 강좌는 다음과 같은 목차로 진행될 예정이며 예제 위주와 간결한 문체를 사용하여 정리 하도록 하겠습니다. 개발 환경은 별도로 거론하지 않는다면 다음과 같습니다. - Windows XP Platform - Visual C++ 6.0 ..