C# OpenCV 강좌 : 제 2강 - Mat 클래스
Mat 클래스
Mat 클래스는 Matrix의 약자로 행렬을 표현하기 위한 데이터 형식입니다.
C++ 스타일의 N차원 고밀도 배열 클래스이며, 행렬(2차원)
을 비롯해 배열(1, 2, 3차원)
을 효율적으로 표현할 수 있습니다.
Mat 클래스는 헤더(Header)
와 데이터 포인터(Data Pointer)
로 구성되어 있습니다.
헤더
는 Mat 클래스에 대한 정보가 담겨 있습니다. 즉, 행렬의 크기나 행렬의 깊이 등이 저장됩니다.
데이터 포인터
는 각 데이터가 담겨 있는 메모리 주소 정보가 저장되어 있습니다.
Mat 클래스 구성 요소
Mat 클래스는 크게 세 가지
의 구조로 이뤄져있습니다.
행렬의 크기
, 데이터 타입
, 깊이(채널)
입니다. 구조의 의미는 다음과 같습니다.
행렬의 크기
: 행(높이)과 열(너비) 크기데이터 타입
: 행렬의 각 요소에 대한 데이터 타입깊이(채널)
: 행렬의 깊이(채널)
행렬의 크기
는 행과 열의 크기를 정수(int)로 할당해 사용합니다.
데이터 타입
은 행렬의 각 요소에 대한 데이터 타입을 의미합니다. 정수(int)나 부동소수점(float) 등으로 할당이 가능합니다.
깊이(채널)
는 행렬이 몇 개로 중첩되어있는지 의미합니다. 색상 이미지라면 3채널을 가지며, 흑백 이미지라면 1채널을 갖습니다.
네임스페이스 추가
OpenCV4의 데이터 형식이나 함수 및 메서드를 사용하기 위해 네임스페이스에 using OpenCvSharp;
을 추가합니다.
Mat 클래스 또한 using OpenCvSharp;
에 포함되어 있습니다.
-
Tip : 모호한 참조가 발생했을 때,
OpenCvSharp.*
의 형태로 함수나 메서드를 호출해 사용합니다. -
Tip : 추가적인 기능이 포함된 확장 네임스페이스를 사용하기 위해서는
using OpenCvSharp.*;
의 형태로 등록합니다.
Mat 클래스 생성
Mat 클래스는 생성자를 인스턴스화 하는 순간 행렬이 생성됩니다.
기본 생성자의 경우, 행렬의 크기와 데이터 타입은 존재하지 않습니다.
Mat 클래스의 일반적인 생성 형태는 위와 같습니다.
행렬의 크기는 Size 구조체
를 사용하거나 행과 열
에 값을 직접 입력하는 식으로 할당이 가능합니다.
데이터 타입과 깊이(채널)은 MatType.*
을 사용해 할당이 가능합니다.
MatType은 CV_AABB
의 구조를 가집니다. AA
는 데이터 타입을 의미하며, BB
는 깊이(채널)을 의미합니다.
U8
은 unsigned 8-bit integers를 의미하며, C3
는 3채널을 의미합니다.
Mat 클래스 생성자
Mat 클래스는 위와 같은 형태로도 사용할 수 있습니다.
Size 구조체
, Range 구조체
, Rect 구조체
, Scalar 구조체
, 배열
, 열거자
, 포인터
등을 사용해 생성할 수 있습니다.
또한, 외부의 파일을 불러와 이미지를 Mat 클래스에 할당해 사용할 수 있습니다.
Mat 클래스는 기본적으로 이미지(행렬)을 표시하기 위한 데이터 형식입니다.
-
Tip : Mat 클래스는 래스터 주사 순서를 따릅니다.
-
Tip : Mat 클래스는 행렬 표현식(MatExpr 클래스), 희소 행렬(SparseMat 클래스) 등도 호환이 가능합니다.
댓글 남기기