더북(TheBook)

그런데 이처럼 행렬의 크기와 타입을 지정하여 Mat 객체를 생성할 경우, Mat 행렬의 모든 원소는 흔히 쓰레기 값(garbage value)이라고 부르는 임의의 값으로 채워지게 됩니다. 그러므로 Mat 객체를 생성함과 동시에 모든 원소 값을 특정 값으로 초기화하여 사용하는 것이 안전합니다. 정해진 크기와 타입의 Mat 객체를 생성하고 모든 원소 값을 초기화하려면 다음 형태의 생성자를 사용합니다.

Mat::Mat(int rows, int cols, int type, const Scalar& s);
Mat::Mat(Size size, int type, const Scalar& s);

rows

새로 만들 행렬의 행 개수(영상의 세로 크기)

cols

새로 만들 행렬의 열 개수(영상의 가로 크기)

size

새로 만들 행렬의 크기

type

새로 만들 행렬의 타입

s

행렬 원소 초깃값

 

이 생성자들은 행렬의 크기와 타입을 지정하는 생성자에 원소의 초깃값을 설정하는 인자 s가 추가되어 있습니다. 초깃값 s의 타입으로 사용된 Scalar 클래스는 네 개의 실수 값을 저장할 수 있는 OpenCV 클래스이며, 주로 영상의 픽셀 값을 표현하는 용도로 사용됩니다.7 Scalar 클래스가 그레이스케일 영상의 픽셀 값을 표현할 때에는 하나의 멤버 변수만을 사용하고, 3채널 컬러 영상의 픽셀 값을 표현할 때에는 세 개의 멤버 변수를 사용합니다. 예를 들어 모든 픽셀 값이 128로 초기화된 그레이스케일 영상과 모든 픽셀이 빨간색으로 설정된 컬러 영상을 생성하려면 다음과 같이 코드를 작성합니다.

Mat img5(480, 640, CV_8UC1, Scalar(128));          // initial values, 128
Mat img6(480, 640, CV_8UC3, Scalar(0, 0, 255));    // initial values, red

 

7 Scalar 클래스에 대해서는 3.3.2절에서 좀 더 자세하게 설명하겠습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.