해당 포스트는 "OpenCV로 배우는 영상 처리 및 응용", "C++ API OpenCV 프로그래밍" 책의 내용을 요약한 것이다.



※ 기본 자료형

OpenCV는 기본 자료형을 CV_<bit_depth>{U|S|F}C(<number_of_channels>) 형식으로 정의한다. <bit_depth>는 깊이 비트수이다. 깊이 비트 수란 픽셀 데이터에 할당된 비트 수다. 예를 들어, 깊이 비트 수가 8이라면 각각의 픽셀들은 0에서 255까지의 값을 가진다. {U|S|F}는 자료형으로 unsigned signed, float를 의미한다.  C는 채널 수를 의미한다. 예를 들면 CV_8UC1은 8비트 깊이의 uchar 자료형의 1-채널 자료형이다. 채널 수가 1이라면 CV_8U로 채널 수를 생략 할 수 있다. CV_32FC3은 32비트 깊이의 float 자료형의 3-채널 자료형이다. 


- CV_8U : uchar(unsigned char)

- CV_8S : signed char

- CV_16U : unsigned short int

- CV_16S : signed short int

- CV_32S : int

- CV_32F : float

- CV_64F : double


※ DataType 클래스

DataType 클래스는 OpenCV 기본 자료형을 표현하기 위한 템플릿 클래스이다. 멤버 데이터나 메서드를 갖지 않는다. 주로 템플릿 클래스 등에서 자료형을 OpenCV 자료형으로 변환하는 목적으로 사용되며,OpenCV를 이용하여 템플릿을 사용한 전문적인 라이브러리 구축을 위해서 필요하다. DataType 클래스에 대해 예를 들자면 DataType<bool>::type은 CV_8, DataType<Vec<uchar,3>>:type은 CV_8UC3이다. 

Mat A1(1,2, <DataType>::type);
//Mat A2(1,2,CV_8UC3);



※ Point_ 클래스

Point_는 2D 좌표를 표현하는 템플릿 클래스이다. 멤버 변수로는 x,y가 있으며 다음과 같은 자료형들을 가진다.

Point_<int> Point2i;
typedef Point2i Point;
typedef Point_<float> Point2f;
typedef Point_<double> Point2d;

+, -, *, =, ==, !=등의 연산자를 사용할 수 있고 내적을 계산하는 dot(), 외적을 계산하는 cross(), 영역 내부에 Point_ 변수가 포함되어 있는 지 확인하는 inside() 메서드 등이 있다.



※ Point3_ 클래스

Point3_는 3D 좌표를 표현하는 템플릿 클래스이다. 멤버 변수로는 x,y,z가 있으며 다음과 같은 자료형을 가진다.

typedef Point3_<int> Point3i;
typedef Point3_<float> Point3f;
typedef Point3_<double> Point3d;

Point3_ 클래스는 Point_ 클래스와 같이 여러 연산이 가능하고 다양한 메스드가 있다.



※ Size_ 클래스

Size_는 크기를 표현하는 템플릿 클래스이다. 멤버 변수로는 width와 height가 있으며 다음과 같은 자료형들을 가진다.

typedef Size_<int> Size2i;
typedef Size2i Size;
typedef Size_<float> Size2f;

Size_ 클래스 또한 +, -, *, =, ==, !=등의 연산자를 사용할 수 있고 widthd와 height를 곱한 값을 반환해주는 area() 메서드가 있다.



※ Rect_ 클래스

Rect_는 사각형을 표현하는 템플릿 클래스이다. 멤버 변수는 x,y,width,height가 있고 다음과 같은 자료형을 가진다.

typedef Rect_<int> Rect;

Rect_ 클래스 또한 다양한 연산이 가능하다. Rect_ 클래스끼리 "&" 연산을 하면 교집합 Rect_ 변수가 반환되고, "|" 연산을 할 시 매개 변수로 전달된 Rect_ 클래스들을 포함하는 최소 사각형을 반환한다. 메서드로는 영역의 topLeft를 반환하는 tl(), bottomRight를 반환하는 br(), size(), area(), contains() 등이 있다.  



※ RotatedRect 클래스

RotatedRect 클래스는 회전된 사각형을 표현하는 클래스이다. 멤버 변수로는 중심점인 Point2f 자료형의 center와 크기인 Size2f 자료형의 size 그리고 회전각을 나타내는 float 자료형의 angle이 있다. 회전각은 center을 원점으로 해서 x축 기준 아래방향으로 시작한다. 예로, 일반 수학에서 각 345도가 angle로 15가 된다.  해당 클래스는 회전 사각형의 4개의 모서리를 모두 포함하는 최소 크기의 사각형 영역을 반환하는 boundingRect() 메서드와 인수로 입력되는 Point2f 배열에 회전 사각형의 4개 꼭짓점을 전달하는 points() 메서드가 있다.


+ Recent posts