3.2.2 행렬의 생성과 초기화
이 절에서는 Mat 클래스를 이용하여 행렬 객체를 생성하는 여러 가지 방법에 대해 알아보겠습니다. 가장 기본적인 Mat 객체 생성 방법은 Mat 클래스의 기본 생성자를 이용하는 방법입니다. 기본 생성자는 아무런 인자를 받지 않으며 실제 코드를 작성할 때는 단순히 Mat 클래스 타입의 변수를 선언하는 형태입니다.
Mat img1;
이렇게 생성된 img1 객체는 비어 있는 행렬입니다. 즉, img1.rows와 img1.cols 값은 0이고, img1.data에도 0(NULL)이 저장됩니다. 이러한 비어 있는 행렬을 OpenCV 영상 처리 함수의 입력으로 사용하거나 또는 비어 있는 행렬의 원소 값을 참조하려고 하면 에러가 발생하므로 주의해야 합니다.
Mat 객체를 생성함과 동시에 원소 값 저장을 위한 메모리 공간을 할당하려면 다음 생성자를 사용합니다.
Mat::Mat(int rows, int cols, int type); |
|
• rows |
새로 만들 행렬의 행 개수(영상의 세로 크기) |
• cols |
새로 만들 행렬의 열 개수(영상의 가로 크기) |
• type |
새로 만들 행렬의 타입 |
이 생성자는 행 개수가 rows이고, 열 개수가 cols인 2차원 행렬(또는 영상)을 생성합니다. 이 생성자의 세 번째 인자 type에는 Mat 객체의 타입을 나타내는 매크로 상수를 전달합니다. 이 생성자를 이용하여 가로 크기가 640이고, 세로 크기가 480인 영상을 생성하려면 다음과 같은 형태로 코드를 작성합니다.
Mat img2(480, 640, CV_8UC1); // unsigned char, 1-channel Mat img3(480, 640, CV_8UC3); // unsigned char, 3-channels