OpenCV에서 Mat 행렬은 다양한 자료형의 원소를 가질 수 있습니다. 또한 Mat 클래스의 원소는 하나의 값을 가질 수도 있고, 또는 여러 개의 값이 모여서 하나의 원소로 표현되기도 합니다. Mat 클래스를 제대로 이용하려면 Mat 클래스가 행렬 원소를 구성하고 표현하는 방법에 대해 이해하고 있어야 합니다.
OpenCV는 C/C++ 기본 자료형 중에서 unsigned char, signed char, unsigned short, signed short, int, float, double 자료형을 사용하는 Mat 행렬을 지원합니다. OpenCV 4.0부터는 16비트 실수형 자료형도 사용할 수 있습니다. Mat 클래스에서 행렬이 어떤 자료형을 사용하는지에 대한 정보를 깊이(depth)라고 부릅니다. OpenCV에서 Mat 행렬의 깊이는 다음과 같은 형식의 매크로 상수를 이용하여 표현합니다.
CV_<bit-depth>{U|S|F}
깊이 표현 매크로 상수 형식의 처음에 나타나는 CV_는 OpenCV를 나타내는 접두사와 같은 역할입니다. 그 뒤의 <bit-depth>에는 8, 16, 32, 64의 숫자를 지정할 수 있으며, 이는 원소 값 하나의 비트 수를 나타냅니다. 그다음 {U|S|F} 부분에는 U, S, F 세 문자 중 하나를 지정할 수 있습니다. 여기서 U는 부호 없는 정수형, S는 부호 있는 정수형, F는 부동 소수형을 의미합니다. 실제로 OpenCV 라이브러리는 행렬의 깊이 표현을 위해 다음과 같은 매크로 상수를 정의하여 사용합니다.
#define CV_8U 0 // uchar, unsigned char #define CV_8S 1 // schar, signed char #define CV_16U 2 // ushort, unsigned short #define CV_16S 3 // signed short #define CV_32S 4 // int #define CV_32F 5 // float #define CV_64F 6 // double #define CV_16F 7 // float16_t