Data Analysis for Investment & Control

OpenCV 사용하기(2) 본문

Robotics/Software

OpenCV 사용하기(2)

아슈람 2008. 11. 13. 14:24
반응형

이전 글에서 카메라로부터 받은 각 픽셀의 데이터를 하나하나씩 IplImage 변수에 집어 넣는 것까지 했었다.

이제는 색상 기반의 영상 처리를 위해 기본적으로 해야 할 것들... RGB면 R, G, B, HSI(HSV)면 H, S, I 값으로 분리해서 Threshold시키는 작업을 해야한다. 그러기 위해서는 각 색상 데이터를 분리할 필요가 있는데, 이때 사용하는 것이 cvCvtPixToPlane 함수이다. 함수는

cvCvtPixToPlane(src, dst0, dst1, dst2, dst3)과 같은 형식인데, 함수 내부의 파라미터는 IplImage 변수이다. 함수를 사용하는 모드는 두 가지인데, 하나는 3개의 채널로 이루어진 데이터를 하나씩 분리하는 방법이고, 다른 하나는 4개의 채널로 이루어진 데이터를 하나씩 분리하는 방법이다. 3개의 채널로 분리하는 방법은 src 데이터가 초기화 될 때, 3개의 채널 값을 가지는 데이터로 생성되었을 때, 즉, R, G, B 값과 같은 값만 갖을 때 사용하는 방법이며, 4개의 채널로 분리하는 방법은 하나의 픽셀이 32비트로 이루어지도록 설정했을 때, 즉, cvCreateImage(cvGetSinze(image), 8, 4)처럼 선언을 했을 때 사용한다.

만약, 4개의 채널로 이루어진 변수를 3개 채널만 분리하는 방법을 사용해 버린다면, 에러가 발생할 것이다. 만약 image라는 변수가 4개의 채널로 이루어진 변수라면,
 
IplImage *image = cvCreate(cvSize(320, 240), 8, 4);
IplImage *R = cvCreate(cvSize(320, 240), 8, 1);
IplImage *G = cvCreate(cvSize(320, 240), 8, 1);
IplImage *B = cvCreate(cvSize(320, 240), 8, 1);
IplImage *A = cvCreate(cvSize(320, 240), 8, 1); 

cvCvtPixToPlane(image, R, G, B, NULL)     // Error
cvCvtPixToPlane(image, R, G, B, A)          // Good

참고로... cvCvtPixToPlane과 반대로 각 채널을 함치는 함수는 cvCvtPlaneToPix이다.

색상 채널을 분리하는 데까지 성공했다면, 이제는 각 채널 값을 기준으로 이잔화를 하는 과정을 수행해야 한다. 여기서 사용하게 되는 함수는 cvThreshold이다. 함수 파라미터 중 마지막 파라미터에 CV_THRESH_BINARY 값을 사용하면, 기준 값을 넘어서는 픽셀은 설정 값으로 아닌 픽셀은 0으로 설정된다. 

반응형

'Robotics > Software' 카테고리의 다른 글

OpenCV 사용하기(3)  (0) 2008.11.14
OpenCV 사용하기(1)  (0) 2008.11.12
OpenCV Manual  (0) 2008.11.11
CUDA 개발환경 만들기  (0) 2008.11.10
[취재]엔비디아 GPU 병렬 컴퓨팅 솔루션 데이  (0) 2008.11.10
Comments