Rect_ 클래스
사각형의 위치와 크기 정보를 표현할 때 사용한다.
사각형의 좌측 상단 점의 좌표를 나타내는 x, y 멤버 변수와
사각형의 가로 및 세로 크기를 나타내는 width, height 멤버 변수를 가지고 있다.
template<typename _Tp> class Rect_
{
public:
Rect_(); // 기본 생성자로 모든 멤버 변수를 0으로 초기화
Rect_(_Tp _x, _Tp _y, _Tp _width, _Tp _height); // (_x, _y, _width, _height) 사각형 정보를 인자로 받는 생성자로 x = _x, y = _y, width = _width, height + _height 로 초기화
Rect_(const Recdt_& r); // 복사 생성자로 x = r.x, y = r.y, width = r.width, height = r.height로 초기화
Rect_(cosnt Point_<_Tp>& org, const Size_<_Tp>& sz); // 좌측 상단 점의 좌표와 사각형의 크기 정보를 인자로 받는 생성자
Rect_(const Point_<_Tp>& pt1, const Point_<_Tp>& pt2); // 사각형에서 서로 대각 위치에 있는 두 점의 좌표를 인자로 받는 생성자
Rect_& operator = (const Rect_& r); // 대입 연산자 재정의
Point_<_Tp> t1() const; // Rect::tl() 멤버 함수는 사각형의 좌측 상단 점의 좌표 반환
Point_<_Tp> br() const; // Rect::br() 멤버 함수는 사각형의 우측 하단 점의 좌표 반환
Size_<_Tp> size() const; // Rect::size() 멤버 함수는 사각형의 크기 정보 반환
_Tp area() const; // Rect::area() 멤버 함수는 사각형의 면적(width x height) 반환
bool empty() const; // Rect::empty() 멤버 함수는 유효하지 않은 사각형이면 true 반환
bool contains(const Point_<_Tp>& pt) const; // Rect::contains() 멤버 함수는 인자로 전달된 pt 점이 사각형 내부에 있으면 true 반환
_Tp x, y, width, height); // 멤버 변수로 x, y 는 사각형 좌측 상단 점의 좌표, width, height는 사각형의 가로와 세로 크기를 나타냄
};
typedef Rect_<int> Rect2i; /*
typedef Rect_<float> Rect2f; Rect_ 클래스 이름 재정의
typedef Rect_<double> Rect2d;
typedef Rect2i Rect; */
Rect_ 클래스는 템플릿으로 정의되어 있으며, 다양한 자료형에 대해 이름이 재정의되어 있다.
int 자료형을 이용하여 사각형 정보를 표현하려면 Rect2i 클래스를 사용하고,
float 자료형으로 사각형을 표현하려면 Rectd2f 클래스를 사용한다.
사각형 정보를 정수형으로 표현하는 경우가 많기 때문에 Rect2i는 다시 Rect라는 이름으로 재정의되어 있다.
즉, Rect 클래스는 정수형 멤버 변수 x, y, width, height를 가지고 있는 사각형 표현 클래스이다.
Rect_ 클래스 코드 작성 방법
Rect rc1; // rc1 = [0 x 0 from (0, 0)]
Rect rc2(10, 10, 60, 40); // rc2 = [60 x 40 from (10, 10)]
2차원 정수형 좌표계에서의 사각형 정보 표현 방법이다. 주석 부분은 Rect_ 객체의 위치와 크기 정보이다.
rc1은 기본 생성자를 사용하여 생성하였으므로 멤버 변수는 0으로 초기화된다.
rc2는 (10, 10) 좌표부터 크기가 60 x 40인 사각형임을 나타낸다.
rc2는 네 개의 정수를 생성자 인자로 사용하였다.
이 인자들은 차례대로 x(10), y(10), width(60), height(40) 값으로 설정된다.
Rect_ 클래스의 산술 연산
Rect_ 클래스의 연산은 Size_ 또는 Point_ 클래스 객체와의 산술 연산자 재정의가 되어 있다.
Rect_ 클래스 + Size_ 클래스를 계산하면 사각형의 가로와 세로 크기가 변경된다.
Rect_ 클래스 + Point_ 클래스를 계산하면 사각형의 위치가 변경된다.
Rect rc1; // rc1 = [0 x 0 from (0,0)]
Rect rc2(10, 10, 60, 40) // rc2 = [60 x 40 frome (10, 10)]
Rect rc3 = rc1 + Size(50, 40) // rc3 = [50 x 40] frome (0, 0)]
Rect rc4 = rc2 + Point(10, 10) // rc4 = [60 x 40 frome (20, 20)]
rc1는 기본 생성자를 사용하여 생성하였으므로 x, y, width, height 의 값이 0으로 초기화되어 있다.
Rect 변수 rc1에 Size를 더했으므로 사각형의 크기만 변경되고 위치는 변경되지 않는다.
rc1 + Size(50, 40) = rc3(0, 0, 50, 40)
Rect 변수 rc2는 생성과 동시에 x, y, width, height를 각각 10, 10, 60, 40으로 초기화했다.
Rect 변수 rc2에 Point를 더했으므로 사각형의 위치만 변경되고 크기는 변경되지 않는다.
rc2(10, 10, 60, 40) + Point(10, 10) = rc4(20, 20, 60, 40)
Rect_ 클래스의 논리 연산
Rect_ 객체끼리 서로 논리 연산자인 &(and), |(or)를 이용하여 논리 연산을 수행할 수 있다.
두 개의 사각형 객체끼리 & 연산을 수행하면 두 사각형이 교차하는 사각형 영역을 반환한다.
두 개의 사각형 객체끼리 | 연산을 수행하면 모두 포함하는 최소 크기의 사각형 영역을 반환한다.
Rect rc3(0, 0, 50, 40); // rc3 = [50 x 40 from (0, 0)]
Rect rc4(20, 20, 60, 40); // rc4 = [60 x 40 from (20, 20)]
Rect rc5 = rc1 & rc2; // rc5 = [30 x 20 from (20, 20]
Rect rc6 = rc1 | rc2; // rc6 = [80 x 60 from (0, 0)]
rc1은 (0, 0) 좌표에서 시작하는 50 x 40 크기의 사각형이다.
rc2는 (20, 20) 좌표에서 시작하는 60 x 40 크기의 사각형이다.
이 두 사각형에 대해 & 연산을 하면, 겹치는 영역이 반환되고,
이 두 사각형에 대해 | 연산을 하면 두 사각형을 모두 포함하는 최소 크기의 사각형이 반환된다.
std::cout 함수를 이용하여 Rect_ 객체 정보를 출력할 수 있다.
std::cout << "rc5 : " << rc5 << std::endl;
std::cout << "rc6 : " << rc6 << std::endl;
std::cout 을 이용하여 Rect_ 객체 출력시
사각형 정보가 [width x height frome (x, y)] 형식으로 출력된다.
rc5 : [30 x 20 from (20, 20)]
rc6 : [80 x 60 from (0, 0)]
'DevelopmentTool > OpenCV' 카테고리의 다른 글
[OpenCV] Range 클래스 (0) | 2022.11.17 |
---|---|
[OpenCV] RotatedRect 클래스 (0) | 2022.11.17 |
[OpenCV] Size_ 클래스 (0) | 2022.11.16 |
[OpenCV] Point_ 클래스 (0) | 2022.11.16 |
[OpenCV] Visual Studio - OpenCV 환경 설정 (0) | 2022.11.16 |