더북(TheBook)

컬러 영상에서 픽셀 값을 참조할 때에도 Mat::at() 함수를 사용합니다. Mat::at() 함수는 템플릿으로 정의된 함수이므로 3채널 컬러 영상에 대해 Mat::at() 함수를 사용하려면 Vec3b 자료형을 명시해야 합니다. 예를 들어 앞에서 butterfly.jpg 나비 영상을 저장하고 있는 img 객체에서 (0, 0) 위치의 픽셀 값을 참조하려면 다음과 같이 코드를 작성합니다.

Vec3b& pixel = img.at<Vec3b>(0, 0);

앞의 예제 코드에서 Vec3b 참조형으로 선언된 변수 pixel은 img 영상의 (0, 0) 좌표에서 BGR 색상 정보를 가리킵니다. Mat::at() 함수가 픽셀 정보를 참조 형태로 반환하기 때문에 변수 pixel 값을 변경하면 img 영상의 (0, 0) 좌표 픽셀 값도 같이 변경됩니다. Vec3b 클래스는 [] 연산자 재정의를 이용하여 각 멤버 변수 값에 접근할 수 있으므로, pixel에 저장된 파란색(B), 녹색(G), 빨간색(R) 색상 성분 값을 각각 알고 싶다면 다음과 같이 코드를 작성합니다.

uchar b1 = pixel[0];
uchar g1 = pixel[1];
uchar r1 = pixel[2];

이 예제 코드에서 변수 b1, g1, r1에는 각각 pixel의 파란색, 녹색, 빨간색 성분 값이 저장됩니다.

Mat::ptr() 함수를 이용하여 컬러 영상의 특정 행 시작 주소를 얻어 올 때에도 Vec3b 자료형을 명시하여 사용해야 합니다. 예를 들어 img 컬러 영상에서 0번째 행 시작 픽셀 주소를 알고 싶다면 다음과 같이 코드를 작성합니다.

Vec3b* ptr = img.ptr<Vec3b>(0);
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.