4 minute read



2.1.1 Point_ Class


Point_ 클래스는 2D 평면 상의 점의 좌표를 표현하는 template class. 멤버 변수는 xy이다.

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);
}

Tags:

Categories:

Updated: