예를 들어 컬러 영상의 픽셀 값을 표현하고 싶을 때는 Vec<uchar, 3> 형식 대신에 Vec3b 클래스를 사용할 수 있습니다. Vec3b 클래스를 사용하면 앞에서 설명한 p1, p2 변수 선언을 다음과 같이 작성할 수 있습니다.
Vec3b p1, p2(0, 0, 255);
이와 같이 변수를 선언할 경우 p1과 p2는 각각 내부에 uchar val[3]; 형식의 멤버 변수를 가지고 있습니다. p1의 경우 p1.val 배열 원소가 모두 0으로 초기화되고, p2의 경우는 p2.val[0]은 0, p2.val[1]은 0, p2.val[2]는 255로 초기화됩니다. 만약 p1 변수의 첫 번째 원소를 100으로 변경하고 싶다면 다음과 같이 코드를 작성할 수 있습니다.
p1.val[0] = 100;
그런데 Vec 클래스는 다음과 같이 [] 연산자 재정의가 되어 있기 때문에 [] 연산자를 이용하여 멤버 변수 val 배열에 쉽게 접근할 수 있습니다.
template<typename _Tp, int cn> inline _Tp& Vec<_Tp, cn>::operator [](int i) { CV_DbgAssert( (unsigned)i < (unsigned)cn ); return this->val[i]; }
이 코드에서 CV_DbgAssert() 매크로 함수는 디버그 모드에서만 동작하는 예외 처리 코드이며, 동작 성능을 고려하여 릴리스 모드에서는 무시됩니다. [] 연산자 재정의를 이용하여 p1 변수의 첫 번째 원소를 100으로 변경하려면 다음과 같이 코드를 작성합니다.
p1[0] = 100;