코드 3-6에 나타난 Mat 클래스는 다양한 형태의 생성자와 많은 멤버 함수, 멤버 변수를 가지고 있습니다. 생성자와 멤버 함수 사용법은 이후 3.2.2절부터 예제 코드와 함께 자세히 설명하기로 하고, 여기서는 코드 3-6의 28~31행에 나타난 Mat 클래스의 멤버 변수에 대해 알아보겠습니다. 먼저 Mat::dims 멤버 변수는 Mat 행렬의 차원을 나타내며, 영상과 같은 2차원 행렬의 경우 Mat::dims 값은 2입니다. Mat::rows와 Mat::cols 멤버 변수는 2차원 행렬의 크기를 나타냅니다. Mat::rows는 행렬의 행 개수를 나타내고, Mat::cols는 열 개수를 나타냅니다. 만약 Mat 객체에 정지 영상이 저장되어 있는 경우라면 Mat::rows는 영상의 세로 픽셀 크기이고, Mat::cols는 영상의 가로 픽셀 크기입니다. Mat::rows와 Mat::cols 멤버 변수는 Mat 객체가 2차원 행렬인 경우에만 의미 있는 값을 가지며, 3차원 이상의 행렬에서는 -1이 저장됩니다. 3차원 이상 행렬의 크기 정보는 Mat::size 멤버 변수를 이용하여 참조할 수 있습니다.4 Mat::data는 행렬의 원소 데이터가 저장되어 있는 메모리 공간을 가리키는 포인터형 멤버 변수입니다. 만약 행렬에 아무것도 저장되어 있지 않은 상태라면 Mat::data는 0(NULL) 값을 가집니다. Mat 클래스의 모든 멤버 변수는 public 접근 지시자로 선언되어 있어서 클래스 외부에서 직접 접근할 수 있습니다. 코드 3-6에 소개되지 않은 Mat 클래스 멤버 변수들은 활용성이 높지 않으므로 이 책에서는 설명을 생략합니다.
Note
Mat 클래스는 이름에서 알 수 있듯이 행렬(matrix)을 표현하는 클래스입니다. 그러나 OpenCV가 컴퓨터 비전 라이브러리이기 때문에 실제로는 일반적인 행렬보다는 2차원 영상을 표현하는 용도로 많이 사용됩니다. 그러므로 이 책에서는 Mat 클래스로 생성된 객체를 행렬이라고 표현하기도 하고, 영상이라고 부르기도 합니다. 앞으로 Mat 클래스 타입의 변수를 영상이라고 표현해도 혼동하지 않길 바랍니다.
4 Mat::size 멤버 변수의 타입인 MatSize는 3차원 이상의 행렬 크기를 표현하기 위해 사용되는 클래스입니다. MatSize 클래스에 대한 자세한 설명은 OpenCV 문서 사이트를 참고하기 바랍니다.