DevelopmentTool/OpenCV

[OpenCV] Mat 클래스의 자료형

유제필 2022. 11. 17. 08:27

OpenCV에서 Mat 클래스의 여러 자료형의 원소를 가질 수 있으며, 원소는 하나의 값을 가질 수도 있고,

또는 여러 개의 값이 모여서 하나의 원소로 표현되기도 한다.

OpenCV에서 C/C++ 기본 자료형 중 unsigend char, signed char, unsigned short, signed short,

int, float, double 자료형을 사용하는 Mat 행렬을 지원한다.

OpenCV 4.0 버전 부터는 16비트 실수형 자료형도 존재한다.

Mat 클래스에서 어떤 행렬이 어떤 자료형을 사용하는지에 대한 정보를 깊이(depth)라고 한다.

OpenCV는 C/C++에서 사용하는 기본 자료형의 이름을 typedef 구문을 이용하여 재정의 해서 사용한다.

OpenCV에서 사용하는 주요 자료형

OpenCV 자료형
설명
비고
schar
부호 있는 1바이트 정수
uchar
부호 없는 1바이트 정수
short
부호 있는 2바이트 정수
C/C++ 기본 자료형
ushort
부호 없는 2바이트 정수
int
부호 있는 4바이트 정수
C/C++ 기본 자료형
uint
부호 없는 4바이트 정수
C/C++ 기본 자료형
int64
부호 있는 8바이트 정수
uint64
부호 없는 8바이트 정수
float16_t
부호 있는 2바이트 실수
float
부호 있는 4바이트 실수
C/C++ 기본 자료형
double
부호 있는 8바이트 실수
C/C++ 기본 자료형

Mat 행렬의 깊이 형식

CV_<bit-depth>{U | S | F}

CV_ : OpenCV를 나타내는 접두사와 같은 역할
<bit-depth> : 원소 값 하나의 비트 수 (8, 16, 32, 64의 숫자 지정)
U | S | F : U, S, F 세 문자중 하나 지정
            U : 부호 없는 정수형
            S : 부호 있는 정수형
            F : 부동 소수형

행렬의 깊이를 위와 같은 형식으로 매크로 상수를 이용하여 표현한다.

#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     // float_16t

 

Mat가 CV_8U 라는 것은 이 행렬의 원소가 unsigned char 자료형 이라는 것을 의미한다.

만약 행렬 원소를 int 형으로 표기하려면 CV_32S를,

float 형으로 표기하려면 CV_32F인 행렬을 사용해야 한다.

Mat 행렬 원소는 하나의 값을 가질 수도 있고, 여러 개로 구성된 값을 가질 수 있다.

Mat 행렬 원소를 구성하는 각각의 값을 채널(Channel) 이라고 하며,

행렬은 하나의 채널을 가질 수도 있고, 여러 개의 채널을 가질 수도 있습니다.

하나의 행렬을 구성하는 채널은 모두 같은 자료형을 사용해야 한다.

그레이스케일 영상은 하나의 픽셀이 밝기 정보 하나만 사용하므로 1채널 행렬료 표현하고,

트루컬러 영상은 하나의 픽셀이 파란색(Blue), 녹색(Green), 빨간색(Red) 세 개의 색상 정보를

가지므로 3채널 행렬로 표현한다.

Mat 객체의 타입

Mat 행렬의 깊이 정보와 채널 수 정보를 합쳐서 Mat 객체의 타입(Type) 이라고 부른다.

CV_<bit-depth>{U | S | F}C(<number_of_channels>)

CV_ : OpenCV를 나타내는 접두사와 같은 역할
<bit-depth> : 원소 값 하나의 비트 수 (8, 16, 32, 64의 숫자 지정)
U | S | F : U, S, F 세 문자중 하나 지정
            U : 부호 없는 정수형
            S : 부호 있는 정수형
            F : 부동 소수형
(<number_of_channels>) : C1, C3과 같은 채널 정보가 추가로 붙음

예를 들어, CV_8UC1 : 타입은 8비트 unsigned char 자료형을 사용하고 채널이 한 개 타입이다.

CV_8UC3 : 8비트 unsigned char 자료형을 사용하고 채널이 세 개를 가지고 있는 타입이다.

트루 컬러 영상은 세 개의 색상 성분을 가지고 있어 CV_8UC3 타입을 사용한다.

'DevelopmentTool > OpenCV' 카테고리의 다른 글

[OpenCV] Mat 클래스의 행렬 복사  (0) 2022.11.17
[OpenCV] Mat 객체 생성과 초기화 함수  (0) 2022.11.17
[OpenCV] Mat 클래스  (1) 2022.11.17
[OpenCV] String 클래스  (0) 2022.11.17
[OpenCV] Range 클래스  (0) 2022.11.17