Mat 클래스 7

[OpenCV] Mat 클래스의 크기 및 타입 변환 함수

Mat 클래스의 크기나 타입을 변환시키는 멤버 함수가 있다. ​ Mat::convertTo() void Mat::convertTo(OutputArray m, int rtype, doule alpha=1, double beta=0) const; m : 출력 행렬이다. 만약 m 행렬이 적절한 크기와 타입이 아닌 경우 행렬 원소 데이터를 새로 할당한다. rtype : 원하는 출력 행렬의 타입이다. 만약 rtype이 음수이면 출력 행렬은 입력 행렬과 같은 타입을 갖는다. alpha : 추가적으로 곱할 값 beta : 추가적으로 더할 값 Mat::convertTo() 함수는 행렬의 타입을 변경하는 함수이다. 행렬 원소의 타입을 다른 타입으로 변경하고, 추가적으로 모든 원소에 일정한 값을 더하거나 곱할 수 있다. ..

[OpenCV] Mat 클래스의 픽셀 접근 방법

OpenCV 에서 제공하는 픽셀(원소) 접근 방법은 여러 가지가 있다. ​ Mat::at(); template _Tp& Mat::at(int y, int x) y : 참조할 행 번호 x : 참조할 열 번호 반환값 : (_Tp& 타입으로 형 변환된) y번째 행, x번째 열의 원소 값(참조) Mat::at() 함수는 보통 행과 열을 나타내는 2개의 정수를 인자로 받아 해당 위치의 픽셀 값을 참조 형식으로 반환한다. 템플릿을 사용하는 템플릿 함수로서 여러 가지 형태로 재정의가 되어 있다. 템플릿 함수로 지정되어 있기 때문에 사용할 때 자료형을 명시적으로 지정해야 한다. 예를 들어 Mat 행렬의 타입이 CV_8UC1이면 uchar 자료형을, CV_32FC1 타입이라면 float 자료형을 지정한다. ​ 만약 CV..

[OpenCV] Mat 클래스 ROI 추출 함수

ROI(Region Of Interset)란 ROI란 이미지(영상) 에서 내가 원하는 관심 영역을 말한다. ​ Mat 클래스로 정의된 행렬에서 특정 사각형 영역의 부분 행렬을 추출하고 싶을 땐 괄호 연산자 재정의를 사용한다. ​ ​ Mat::Mat(); Mat Mat::operator()(const Rect& roi) const; Mat Mat::operator()(Range rowRange, Range colRange) const; roi : 사각형 관심 영역 rowRange : 관심 행 범위 colRange : 관심 열 범위 반환값 : 추출한 부분 행렬 또는 영상이다. 부분 영사의 픽셀 데이터를 서로 공유한다. 부분 영상 추출 코드 작성 Mat img1 = imread("Lenna.bmp"); // ..

[OpenCV] Mat 클래스의 행렬 복사

Mat 클래스 객체에 저장된 영상 또는 행렬을 복사하는 가장 간단한 방법은 복사 생성자 또는 대입 연산자를 사용하는 것이다. Mat img1 = imread("Lenna.bmp"); Lenna.bmp 파일을 불러와 Mat 타입의 변수 img1에 저장한다. Mat img2 = img1; // 복사 생성자(얕은 복사) img1 변수에 저장된 레나 영상을 복사하여 img2에 저장한다. img1과 같은 크기, 같은 타입의 새로운 Mat 객체 img2를 생성하고, img1의 픽셀 데이터를 img2가 참조하도록 설정한다 즉, img1과 img2는 하나의 영상을 공유하는 서로 다른 이름의 변수 형태로 동작한다. 이처럼 Mat 클래스의 복사 생성자는 행렬의 원소 데이터를 공유하는 얕은 복사(Shallow Copy)를 ..

[OpenCV] Mat 객체 생성과 초기화 함수

Mat 클래스를 이용하여 객체의 생성과 초기화 방법은 여러가지 방법이 있다. ​ Mat 클래스의 객체 생성 방법 Mat(); 기본 생성자 Mat img1; 가장 기본적인 Mat 객체 생성 방법으로 Mat 클래스의 기본 생성자를 이용하는 방법이다. 기본 생성자는 아무런 인자를 받지 않으며, 실제 코드 작성 시에는 단순히 Mat 클래스 타입의 변수를 선언하는 형태이다. img1 객체는 비어 있는 행렬이다. 즉 img1.rows 와 img1.cols 의 값은 0이고 img1.data에도 0(NULL)이 저장된다. 이렇게 비어 있는 행렬을 OpenCV 영상 처리 함수의 입력으로 사용하거나 비어 있는 행렬의 원소 값을 참조 시 에러가 발생한다. Mat::Mat(); 객체 생성과 동시에 원소 값 저장을 위한 메모리..

[OpenCV] Mat 클래스의 자료형

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] Mat 클래스

OpenCV에서 가장 많이 사용하는 클래스는 행렬을 나타내는 Mat 클래스이다. 그러므로 OpenCV 라이브러리를 잘 다루기 위해서는 Mat 클래스를 제대로 이해해야 한다. ​ Mat 클래스의 개요 Mat 클래스란? OpenCV 라이브러리에서 가장 많이 사용하는 행렬을 표현하는 클래스이다. 이름에서 알 수 있듯이 행렬(Matrix)을 표현하는 클래스이다. OpenCV가 컴퓨터 비전 라이브러리이기 때문에 실제로는 일반적인 행렬보다는 2차원 영상을 표현하는 용도로 많이 사용된다. ​ 일반적인 2차원 행렬뿐만 아니라 고차원 행렬을 표현할 수 있으며, 한 개 이상의 채널을 가질 수 있다. 정수, 실수, 복소수 등으로 구성된 헹렬 또는 벡터(vector)를 저장할 수 있고, 그레이스케일 또는 컬러 영상을 저장할 ..