OpenCV에서 가장 많이 사용하는 클래스는 행렬을 나타내는 Mat 클래스이다.
그러므로 OpenCV 라이브러리를 잘 다루기 위해서는 Mat 클래스를 제대로 이해해야 한다.
Mat 클래스의 개요
Mat 클래스란? OpenCV 라이브러리에서 가장 많이 사용하는 행렬을 표현하는 클래스이다.
이름에서 알 수 있듯이 행렬(Matrix)을 표현하는 클래스이다. OpenCV가 컴퓨터 비전 라이브러리이기 때문에
실제로는 일반적인 행렬보다는 2차원 영상을 표현하는 용도로 많이 사용된다.
일반적인 2차원 행렬뿐만 아니라 고차원 행렬을 표현할 수 있으며, 한 개 이상의 채널을 가질 수 있다.
정수, 실수, 복소수 등으로 구성된 헹렬 또는 벡터(vector)를 저장할 수 있고, 그레이스케일 또는 컬러 영상을 저장할 수 있다.
벡터 필드(Vector Field), 포인트 클라우드(Point Cloud), 텐서(Tensor), 히스토그램(Histogram) 등
정보를 나타내는 용도로 사용된다.
실제로 2차원 영상 데이터를 저장하고 처리하는 용도로 가장 많이 사용된다.
Mat 클래스 파일 위치
\C\opencv\sources\modules\core\include\opencv2\core\mat.hpp 파일에 정의되어 있다.
\sources : OpenCV 소스 코드가 있는 폴더 위치
Mat 클래스의 주요 멤버 함수 및 멤버 변수
class Mat
{
public:
Mat(); // 기본 생성자로 멤버 변수를 0으로 초기화
Mat(int rows, int cols, int type); // 행(rows), 열(cols), type을 인자로 받는 생성자
Mat(Size size, int type); // 행렬의 크기를 지정하는 생성자
Mat(int rows, int cols, int type, const Scalar& s); // 크기를 행과 열로 지정하고 원소 값을 초기화하는 생성자
Mat(Size size, int type, const Scalar& s); // 크기를 Size 클래스로 지정하고 원소 값을 초기화하는 생성자
Mat(const Mat& m);
~Mat();
void create(int rows, int cols, int type);
bool empty() const;
Mat clone() const;
void copyTo(OutputArray m) const;
Mat& setTo(InputArray value, InputArray mask=noArray());
static Matexpr zeros(int rows, int cols, int type);
static Matexpr ones(int rows, int cols, int type);
Mat& operator = (const Mat& m);
Mat operator()(const Rect& roi) const;
template<typename _Tp> _Tp* ptr(int i0 = 0);
template<typename _Tp> _Tp& at(int row, int col);
int dims;
int rows, cols;
uchar* data;
Matsize size;
...
};
Mat 클래스의 주요 멤버 변수
int dims;
int rows, cols;
uchar* data;
Matsize size;
Mat::dims : Mat 행렬의 차원을 나타내며, 영상과 같은 2차원 행렬이 경우 값은 2를 가진다.
Mat::rows : 2차원 행렬에서 행 개수(크기)를 나타낸다. 영상이 정지되어 있는 경우면 세로 픽셀 크기를 나타낸다.
Mat::cols : 2차원 행렬에서 열 개수(크기) 를 나타낸다. 영상이 정지되어 있는 경우면 가로 픽셀 크기를 나타낸다.
rows와 cols는 Mat 객체가 2차원 행렬인 경우에만 의미 있는 값을 가지며, 3차원 이상의 행렬에서는 -1이 저장된다.
Mat::size : 3차원 이상 행렬의 크기 정보를 참조할 때 사용한다.
Mat::data : 행렬의 원소 데이터가 저장되어 있는 메모리 공간을 가리키는 포인터형 멤버 변수
만약 행렬에 아무것도 저장되지 않은 상태라면 0(NULL) 값을 가진다.
Mat 클래스의 모든 멤버 변수는 public 접근 제어 지시자로 선언되어 있으므로 클래스 외부에서 직접 접근할 수 있다.
'DevelopmentTool > OpenCV' 카테고리의 다른 글
[OpenCV] Mat 객체 생성과 초기화 함수 (0) | 2022.11.17 |
---|---|
[OpenCV] Mat 클래스의 자료형 (1) | 2022.11.17 |
[OpenCV] String 클래스 (0) | 2022.11.17 |
[OpenCV] Range 클래스 (0) | 2022.11.17 |
[OpenCV] RotatedRect 클래스 (0) | 2022.11.17 |