2.1 기본 자료형
2.1.1 Point_
Class
Point_
클래스는 2D 평면 상의 점의 좌표를 표현하는 template class. 멤버 변수는 x
와 y
이다.
Line 4 : 기본 생성자. x = 0, y = 0으로 초기화.
Line 5 : (_x, _y) 좌표를 인자로 받는 생성자.
Line 6 : 복사 생성자. x = pt.x, y = pt.y로 초기화.
Line 8 : 대입 연산자 재정의.
Line 10 : Point::dot() 멤버 함수. 두 점 사이의 내적을 반환.
Line 11 : Point::ddot() 멤버 함수. 두 점 사이의 내적을 double 자료형으로 반환.
Line 12 : Point::cross() 멤버 함수. 두 점 사이의 외적을 반환.
Line 13 : Point::inside() 멤버 함수. 점의 좌표가 사각형 r 영역 내에 있으면 true를 반환.
Line 16 : 멤버 변수.
Line 19~23 : 여러 자료형에 대한 Point_ 클래스 이름 재정의.
Point_
클래스는 여러 연산자에 대해 연산자 재정의가 되어 있으므로 좌표 연산 수행이 가능.
//pt1 = [3, 5], pt2 = [7, 10]
Point pt3 = pt1 + pt2; // pt3 = [10, 15]
Point pt4 = pt1 * 3; // pt4 = [9, 15]
int d1 = pt1.dot(pt2); // d1 = 71
bool b1 = (pt1 == pt2); // b1 = false
2.1.2 Size_
Class
Size_
클래스는 사각형 영역 또는 영상의 크기를 표현한다. 가로와 세로 길이를 나타내는 width
, height
를 멤버 변수로 갖는다.
Line 4 : 기본 생성자. width = 0, height = 0으로 초기화.
Line 5 : (_width, _height) 좌표를 인자로 받는 생성자.
Line 6 : 복사 생성자. width = sz.width, height = pt.height로 초기화.
Line 8 : 대입 연산자 재정의.
Line 10 : Size::area() 멤버 함수. 사각형 영역의 면적 반환.
Line 11 : Size::empty() 멤버 함수. 유효하지 않은 크기이면 true 반환.
Line 13 : 멤버 변수.
Line 17~21 : 여러 자료형에 대한 Size_ 클래스 이름 재정의.
Size_
클래스 역시 연산 수행이 가능.
//sz1 = [3 x 5], sz2 = [7 x 10]
Size sz3 = sz1 + sz2; // pt3 = [10 x 15]
Size sz4 = sz1 * 3; // pt4 = [9 x 15]
int area1 = sz4.area(); // area1 = 135
2.1.3 Rect_
Class
Rect_
클래스는 사각형의 위치와 크기 정보를 함께 표현한다. 사각형의 좌측 상단 점의 좌표를 나타내는 x
, y
와 사각형의 가로 세로 길이를 나타내는 width
, height
를 모두 멤버 변수로 갖는다.
Line 4 : 기본 생성자. 모든 멤버 변수를 0으로 초기화.
Line 5 : (_x, _y, _width, _height) 정보를 인자로 받는 생성자.
Line 6 : 복사 생성자. x = r.x, y = r.y, width = r.width, height = r.height로 초기화.
Line 7 : 좌측 상단 점의 좌표와 사각형 크기 정보를 인자로 받는 생성자.
Line 8 : 서로 대각 위치의 두 점의 좌표를 인자로 받는 생성자.
Line 10 : 대입 연산자 재정의.
Line 12 : Rect::tl() 멤버 함수. 좌측 상단 점의 좌표를 반환.
Line 13 : Rect::br() 멤버 함수. 우측 하단 점의 좌표를 반환.
Line 14 : Rect::size() 멤버 함수. 사각형의 크기 정보 반환.
Line 15 : Rect::area() 멤버 함수. 사각형의 면적 반환.
Line 16 : Rect::empty() 멤버 함수. 유효하지 않은 사각형이면 true 반환.
Line 17 : Rect::contains() 멤버 함수. 인자로 전달된 점 pt가 사각형 내부에 있으면 true 반환.
Line 20 : 멤버 변수.
Line 23~26 : 여러 자료형에 대한 Rect_ 클래스 이름 재정의.
Rect_
클래스는 Size_
클래스나 Point_
클래스와 의 연산자 재정의가 되어 있다.
// rc1 = [0 x 0 from (0, 0)], rc2 = [60 x 40 from (5, 5)]
Rect rc3 = rc1 + Size(50, 40); // rc3 = [50 x 40 from (0, 0)]
Rect rc4 = rc2 + Point(10, 10); // rc4 = [60 x 40 from (10, 10)]
Rect_
객체끼리 논리 연산이 가능하다. &
연산은 두 사각형이 겹쳐져서 만들어지는 사각형 영역을, |
연산은 두 사각형을 모두 포함하는 가장 작은 사각형 영역을 반환한다.
// rc3 = [50 x 40 from (0, 0)], rc4 = [60 x 40 from (10, 10)]
Rect rc5 = rc3 & rc4; // rc5 = [30 x 20 from (10, 10)]
Rect rc6 = rc3 | rc4; // rc6 = [80 x 60 from (0, 0)]
2.1.4 RotatedRect
Class
RotatedRect
클래스는 회전된 사각형을 표현한다. 중심 좌표를 나타내는 center
, 사각형의 크기를 나타내는 size
, 회전 각도를 나타내는 angle
을 멤버 변수로 갖는다.
Line 4 : 기본 생성자. 모든 멤버 변수를 0으로 초기화.
Line 5 : (_center, _size, _angle) 정보를 인자로 받는 생성자.
Line 6 : 회전된 사각형의 세 꼭지점 좌표를 인자로 받는 생성자.
Line 8 : RotatedRect::points() 멤버 함수. 네 꼭지점 좌표를 pts 인자에 저장.
Line 9 : RotatedRect::boundingRect() 멤버 함수. 회전된 사각형을 포함하는 최소 크기의 사각형 정보를 반환(정수).
Line 10 : RotatedRect::boundingRect2f() 멤버 함수. 회전된 사각형을 포함하는 최소 크기의 사각형 정보를 반환(실수).
Line 13~15 : 멤버 변수.
RotatedRect
클래스는 앞에서 본 클래스들괴는 달리 template class가 아니다. 모든 정보는 float형으로 표현된다.
2.1.5 Range
Class
Range
클래스는 범위 또는 구간을 표현한다. 시작과 끝을 나타내는 start
, end
를 멤버 변수로 갖는다.
Line 4 : 기본 생성자. 모든 멤버 변수를 0으로 초기화.
Line 5 : (_start, _end) 정보를 인자로 받는 생성자.
Line 7 : Range::size() 멤버 함수. 범위 크기(end - start)를 반환
Line 8 : Range::empty() 멤버 함수. start와 end가 같으면 true 반환.
Line 9 : Range::all() 멤버 함수. start = INT_MIN, end = INT_MAX로 설정한 Range 객체를 반환
Line 12 : 멤버 변수.
Range
클래스는 정수 단위 범위를 표현. 이때 start
는 범위에 포함되고 end
는 포함되지 않는다.
2.1.6 String
Class
C++ 표준 라이브러리(STL)에서 문자열을 다룰 때는 std::string
클래스를 사용했다. OpenCV에서는 cv::String
클래스를 사용한다.
만약 특정 형식의 문자열을 만들고 싶으면 format()
함수를 사용.
String format(const char* fmt, ...);
---
- fmt : 형식 문자열
- ... : 가변 인자
- return : 지정한 형식으로 생성된 문자열
여기서 가변 인자는 C 언어에서 printf()
를 쓸 때 사용했던 바로 그것.
// example1.jpg, example02.jpg, example03.jpg를 불러오고 싶다.
Mat img[3];
for (int i = 0; i < 3; i++)
{
String filename = format("example%d.bmp", i + 1);
img[i] = imread(filename);
}