더북(TheBook)

3.3.1 Vec 클래스

하나의 행으로만 이루어진 행렬은 행 벡터라고 부르고, 하나의 열로만 구성된 행렬은 열 벡터라고 부릅니다. 그리고 행 벡터와 열 벡터를 합쳐서 벡터 또는 벡터 행렬이라고 부릅니다. 즉, 벡터는 같은 자료형을 가진 원소 몇 개로 구성된 데이터 형식이라고 볼 수 있습니다.

OpenCV는 이러한 벡터 데이터를 표현할 수 있는 범용적인 Vec 클래스를 제공합니다. 간략화한 Vec 클래스 정의를 코드 3-14에 나타냈습니다.

코드 3-14 간략화한 Matx와 Vec 클래스 정의

01    template<typename _Tp, int m, int n> class Matx
02    {
03    public:
04        ...
05        _Tp val[m*n]; //< matrix elements
06    };
07     
08    template<typename _Tp, int cn> class Vec : public Matx<_Tp, cn, 1>
09    {
10    public:
11        ...
12     /*! element access */
13        _Tp& operator[](int i);
14    };
15     
16    template<typename _Tp, int n> static inline
17    std::ostream& operator << (std::ostream& out, const Vec<_Tp, n>& vec);

 

1~6행 작은 크기의 행렬을 표현하는 Matx 클래스 정의입니다. 행렬 원소는 val 멤버 변수 배열에 저장됩니다.

8~14행 작은 크기의 벡터를 표현하는 Vec 클래스 정의입니다. Vec 클래스는 Matx 클래스를 상속받아 만들어지며, cn개의 원소를 갖는 val 배열을 멤버 변수로 갖습니다.

13행 Vec 클래스의 멤버 변수 배열 val에 접근할 수 있는 [] 연산자 재정의입니다.

16~17행 C++ 표준 출력 스트림을 이용하여 벡터 원소를 출력하는 연산자 재정의입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.