해당 포스트는 "OpenCV로 배우는 영상 처리 및 응용", "C++ API OpenCV 프로그래밍" 책의 내용을 요약한 것이다.



※ Matx 클래스

Matx 클래스는 고정된 작은 크기의 행렬을 위한 템플릿 클래스이다. float와 double 자료형의 1*1에서 6*6까지 크기의 행렬을 제공한다. 예를 들어 Matx34f 자료형은 3*4의 float 행렬이다. 더욱 일반적인 행렬에 대한 클래스는 Mat 클래스로 Matx 클래스에 메서드가 없으면 Mat 클래스로 형변환 후 사용한다. 


다음은 Matx 클래스의 여러 메서드, 멤버 변수에 대한 설명이다.

- t() : 호출한 행렬의 전치행렬을 반환한다. 전치 행렬이란 행렬의 행과 열이 바뀐 행렬을 말한다.

- rows, cols : 행렬의 행과 열 수를 반환한다.

- Matx(숫자)(숫자)(자료형)::zeros() : 행렬의 모든 요소가 0인 행렬을 생성 후 반환한다.

- Matx(숫자)(숫자)(자료형)::ones() : 행렬의 모든 요소가 1인 행렬을 생성 후 반환한다.

- Matx(숫자)(숫자)(자료형)::eye() : 행렬의 대각 요소 모두가 1인 단위 행렬을 반환한다.

- Matx(숫자)(숫자)(자료형)::all(num) : 행렬의 모든 요소가 num으로 초기화된 행렬을 반환한다.

- Matx(숫자)(숫자)(자료형)::randu(x,y) : 범위 [x y] 사이의 균등 분포를 따르는 난수를 가진 행렬을 반환한다.

- Matx(숫자)(숫자)(자료형)::randn(x,y) : 평균 x이고 표준편차가 y인 정규분포를 따르는 난수를 가진 행렬을 반환한다.

- inv() : 호출한 행렬의 역행렬을 반환한다.



※ Vec 클래스

Vec 클래스는 Matx클래스에서 상속받은 클래스로 원소 개수가 작은 숫자 벡터를 위한 템플릿 클래스이다. Vec<Tp,2>, Vec<Tp,3>, Vec<Tp,4>는 각각 Point_, Point3_, Scalar_ 클래스로 형변환이 가능하다. 다음은 Vec 클래스가 typedef로 정의된 코드이다.

typedef Vec<uchar, 2> Vec2b; typedef Vec<uchar, 3> Vec3b; typedef Vec<uchar, 4> Vec4b; typedef Vec<short, 2> Vec2s; typedef Vec<short, 3> Vec3s; typedef Vec<short, 4> Vec4s; typedef Vec<ushort, 2> Vec2w; typedef Vec<ushort, 3> Vec3w; ..........................


※ Scalar_ 클래스

Vec 클래스 중에서 Vec<Tp, 4>에서 파생되 4개의 요소를 갖는 템플릿 클래스이다. typedef Scalar_<double> Scalar로 정의 되어 있어 double 형에 대해서는 Scalar을 사용할 수 있다. 다른 자료형의 경우 Scalar_<int>와 같은 표현으로 코딩 가능하다.



※ Range 클래스

Range 클래스는 Mat 클래승서 행 또는 열 범위를 지정하는 템플릿 클래스이다. Range(start, end)로 호출되는 데 start는 포함되고 end는 포함하지 않는다. 예를 들어 Mat B(Range(0,1), Range(0,3))이 호출되면 2행에 3열로 구성된 1,2,3,4,5,6 원소를 갖는 행렬이 생성된다.


※ Ptr 클래스

Ptr 클래스는 포인터를 감싸서 메모리를 안전하게 사용되도록 하는 템플릿 클래스다. Ptr 클래스로 덮인 동적으로 할당된 포인터는 메모리의 해제를 파괴자에서 자동으로 하므로 delete 연산자를 통해 할당된 메모리를 해제하는 번거로움을 피할 수 있다. Ptr 클래스에서 자동으로 메모리를 해제할 때 별도의 동작이 필요하다면 Prt::delete_Obj()함수에서 해당 동작을 구현하면 된다.


+ Recent posts