C# OpenCV 강좌 : 제 2강 - Mat 클래스

C# OpenCV4 Mat Class

C# OpenCV 강좌 : 제 2강 - Mat 클래스
[ C#-OpenCvSharp4 ] - 윤대희

Mat 클래스


Mat 클래스는 Matrix의 약자로 행렬을 표현하기 위한 데이터 형식입니다.

C++ 스타일의 N차원 고밀도 배열 클래스이며, 행렬(2차원)을 비롯해 배열(1, 2, 3차원)을 효율적으로 표현할 수 있습니다.

Mat 클래스는 헤더(Header)데이터 포인터(Data Pointer)로 구성되어 있습니다.

헤더는 Mat 클래스에 대한 정보가 담겨 있습니다. 즉, 행렬의 크기나 행렬의 깊이 등이 저장됩니다.

데이터 포인터는 각 데이터가 담겨 있는 메모리 주소 정보가 저장되어 있습니다.



Mat 클래스 구성 요소


Mat 클래스는 크게 세 가지의 구조로 이뤄져있습니다.

행렬의 크기, 데이터 타입, 깊이(채널)입니다. 구조의 의미는 다음과 같습니다.

  1. 행렬의 크기 : 행(높이)열(너비) 크기
  2. 데이터 타입 : 행렬의 각 요소에 대한 데이터 타입
  3. 깊이(채널) : 행렬의 깊이(채널)


행렬의 크기는 행과 열의 크기를 정수(int)로 할당해 사용합니다.

데이터 타입은 행렬의 각 요소에 대한 데이터 타입을 의미합니다. 정수(int)나 부동소수점(float) 등으로 할당이 가능합니다.

깊이(채널)는 행렬이 몇 개로 중첩되어있는지 의미합니다. 색상 이미지라면 3채널을 가지며, 흑백 이미지라면 1채널을 갖습니다.



네임스페이스 추가


using OpenCvSharp;


OpenCV4의 데이터 형식이나 함수 및 메서드를 사용하기 위해 네임스페이스에 using OpenCvSharp;을 추가합니다.

Mat 클래스 또한 using OpenCvSharp;에 포함되어 있습니다.

  • Tip : 모호한 참조가 발생했을 때, OpenCvSharp.*의 형태로 함수나 메서드를 호출해 사용합니다.

  • Tip : 추가적인 기능이 포함된 확장 네임스페이스를 사용하기 위해서는 using OpenCvSharp.*;의 형태로 등록합니다.



Mat 클래스 생성


Mat src = new Mat();


Mat 클래스는 생성자를 인스턴스화 하는 순간 행렬이 생성됩니다.

기본 생성자의 경우, 행렬의 크기와 데이터 타입은 존재하지 않습니다.


Mat src1 = new Mat(new Size(640, 480), MatType.CV_8UC3);
Mat src2 = new Mat(480, 640, MatType.CV_8UC3);


Mat 클래스의 일반적인 생성 형태는 위와 같습니다.

행렬의 크기는 Size 구조체를 사용하거나 행과 열에 값을 직접 입력하는 식으로 할당이 가능합니다.

데이터 타입과 깊이(채널)은 MatType.*을 사용해 할당이 가능합니다.

MatType은 CV_AABB의 구조를 가집니다. AA는 데이터 타입을 의미하며, BB는 깊이(채널)을 의미합니다.

U8은 unsigned 8-bit integers를 의미하며, C3는 3채널을 의미합니다.



Mat 클래스 생성자


public Mat();
public Mat(IntPtr ptr);
public Mat(Mat m, Rect roi);
public Mat(Mat m, params Range[] ranges);
public Mat(Size size, MatType type);
public Mat(IEnumerable<int> sizes, MatType type);
public Mat(string fileName, ImreadModes flags = ImreadModes.Color);
public Mat(Size size, MatType type, Scalar s);
public Mat(Mat m, Range rowRange, Range? colRange = default(Range?));.
public Mat(IEnumerable<int> sizes, MatType type, Scalar s);
public Mat(int rows, int cols, MatType type);
public Mat(int rows, int cols, MatType type, Scalar s);
public Mat(IEnumerable<int> sizes, MatType type, IntPtr data, IEnumerable<long> steps = null);
public Mat(IEnumerable<int> sizes, MatType type, Array data, IEnumerable<long> steps = null);
public Mat(int rows, int cols, MatType type, IntPtr data, long step = 0);
public Mat(int rows, int cols, MatType type, Array data, long step = 0);


Mat 클래스는 위와 같은 형태로도 사용할 수 있습니다.

Size 구조체, Range 구조체, Rect 구조체, Scalar 구조체, 배열, 열거자, 포인터 등을 사용해 생성할 수 있습니다.

또한, 외부의 파일을 불러와 이미지를 Mat 클래스에 할당해 사용할 수 있습니다.

Mat 클래스는 기본적으로 이미지(행렬)을 표시하기 위한 데이터 형식입니다.

  • Tip : Mat 클래스는 래스터 주사 순서를 따릅니다.

  • Tip : Mat 클래스는 행렬 표현식(MatExpr 클래스), 희소 행렬(SparseMat 클래스) 등도 호환이 가능합니다.


도움이 되셨다면 광고 클릭 부탁드립니다.


Book Image

책이 출간되었습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C# OpenCvSharp4
  • Python OpenCV4
  • Using Tesseract
  • Using TensorFlow
  • Using Regular Expression
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]


    ⤧  Previous post C# OpenCV 강좌 : 제 1강 - OpenCV 설치 ⤧  Next post C# OpenCV 강좌 : 제 3강 - CAMERA 출력
    C#-OpenCvSharp4 Category