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++ 표준 출력 스트림을 이용하여 벡터 원소를 출력하는 연산자 재정의입니다.