DevelopmentTool/OpenCV

[OpenCV] Size_ 클래스

유제필 2022. 11. 16. 14:29

Size_ 클래스는 영상 또는 사각형 영역의 크기를 표현할 때 사용한다.

Size_ 클래스는 사각형 영역의 가로와 세로 크기를 나타내는 width, height 멤버 변수를 가지고 있다.

template<typename _Tp> class Size_
{
public:
     Size_();                               // 기본 생성자로 width, height를 0으로 초기화
     Size_(_Tp _width, _Tp _height);        // (_width, _height) 크기를 인자로 받는 생성자로 width = _width, height = _height로 초기화
     Size_(const Size_& sz);                // 복사 생성자로 width = sz.width, height = sz.height로 초기화

     Size_& operator = (const Size_& sz);   // 대입 연산자 재정의

     _Tp area() const;                      // Size::area() 멤버 함수는 사각형 크기에 해당하는 면적(width x height)을 반환
     bool empty() const;                    // Size::empth() 멤버 함수는 유효하지 않은 크기이면 true 반환
     

     _Tp width, height;                     // 멤버 변수로 width는 사각형 영역의 가로 크기, height는 사각형 영역의 세로 크기를 나타냄
};

typedef Size_<int>     Size2i;                      /*
typedef Size_<int64>   Size2l;                              Size_ 클래스 이름 재정의
typedef Size_<float>   Size2f;
typedef Size_<double>  Size2d;
typedef Size2i         Size;                                                              */

Size_ 클래스는 템플릿으로 정의되어 있으며, 다양한 자료형에 대해 이름이 재정의 되어 있다.

사각형 영역의 가로 및 세로 크기를 int 자료형으로 표기하려면 간단하게 Size2i 클래스를 사용하면 되고,

float 자료형으로 포기하려면 간단하게 Size2f 클래스를 사용하면 된다.

 

정수형으로 표현하는 방법을 많이 사용하기 때문에, 정수형 표현은 Size 라는 이름으로 재정의 되어 있다.

Size 클래스는 int형 멤버 변수 width(가로), height(세로)를 가지고 있는 사각형 크기 표현 클래스이다.

 

Size_ 클래스 작성 방법

Size sz1;           // sz1 = [0 x 0]
Size sz2(10, 20);   // sz2 = [10 x 20]
sz1.width = 5;      // sz1 = [5 x 0]
sz1. height = 10;   // sz1 = [5 x 10]

위 코드는 2차원 정수 좌표계에서 크기를 표현하는 방법이다.

변수 sz1은 기본 생성자를 사용하여 생성하였으므로 기본적으로 멤버 변수 sz1.width와 sz1.height는 0으로 초기화된다.

그러므로 기본 생성자로 생성된 변수는 0 x 0 의 크기를 나타내고, 이는 유효하지 않은 크기 객체이다.

 

변수 sz2는 생성과 동시에 10 x 20 크기로 초기화하여 10 x 20의 크기를 나타낸다.

변수 sz1은 생성 후에 width에 5를, height에 10을 대입함으로써 5 x 10의 크기를 나타내도록 초기화했다.

 

Size_ 클래스의 산술 연산

Size sz1(5, 10);           // sz1 = [5 x 10]
Size sz2(10, 20);          // sz2 = [10 x 20]
Size sz3 = sz1 + sz2;      // sz3 = [15 x 30]
Size sz4 = sz1 * 2;        // sz4 = [10 x 20]
int area1 = sz4.area();    // area1 = 200

Size 객채끼리의 덧셈 연산을 하면 가로 크기와 세로 크기를 각각 더하여 새로운 객체 크기를 생성한다.

sz1[5 x 10] + sz2[10 x 20] = sz3[15 x 30]

Size 객체에 곱셈 연산을 하면 가로, 세로 각각의 값이 곱해진다.

sz1[5 x 10] * 2 = sz4[10 x 20]

area1에 할당되는 area() 함수는 사각형 크기에 해당하는 면적을 반환한다.

sz4는 [10 x 20] 이므로 10 x 20 = 200이 저장된다.

Size_ 클래스는 C++ 표준 스트림 출력을 지원한다.

그러므로 std::cout 함수를 이용하여 객체의 정보를 출력할 수 있다.

std::cout << "sz3 : " << sz3 << std::endl;
std::cout << "sz4 : " << sz4 << std::endl;

std::cout 함수를 이용해 Size_ 객체를 출력하면 크기 정보가

[width x height] 형식으로 출력된다.

sz3 : [15 x 30]
sz4 : [10 x 20]

'DevelopmentTool > OpenCV' 카테고리의 다른 글

[OpenCV] RotatedRect 클래스  (0) 2022.11.17
[OpenCV] Rect_ 클래스  (0) 2022.11.16
[OpenCV] Point_ 클래스  (0) 2022.11.16
[OpenCV] Visual Studio - OpenCV 환경 설정  (0) 2022.11.16
[OpenCV] 주요 모듈  (0) 2022.11.16