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



※ Mat_ 클래스

Mat_ 클래스는 멤버 변수는 갖지않고 메서드만 존재하는 Mat 클래스로부터 상속된 템플릿 클래스이다. Mat_클래스와 Mat 클래스 사이에서 자유롭게 형변환이 가능하다. Mat_ 클래스와 Mat 클래스 메서드는 대응되는 게 많으나 Mat_ 클래스의 메서드가 더 짧아 자료형 변환에 주의해야한다. Mat_ 클래스는 Mat 클래스의 메서드들을 더 편리하게 사용할 수 있다. 예를 들어 Mat_Mat_(int _rows, int _cols) 생성자는 Mat::Mat(_rows, _cols, DataType<Tp>::type)과 같다. Mat_<Tp>::operator()(int y, int x)와 Mat::at<Tp>(int y, int x) 와 동일하다. 즉 Mat_는 a(1,1)로 접근할 수 있으나 Mat는 A.at(1,1)로 접근할 수 있다. 코딩할 때 대부분은 Mat 클래스를 사용해도 충분하나 행렬 요소에 빈번히 접근하는 연산을 하거나 행렬의 자료형이 미리 결정되면 Mat_클래스를 사용하는 것이 편리하다. 그 밖에 행렬 생성(create), 행렬 정보를 얻을 수 있는 메서드, 부분 행렬 헤더, ROI, 반복자 등은 Mat 클래스와 거의 비슷하다.


※ InputArray 클래스

InputArray 클래스는 OpenCV 함수의 입력으로 사용될 벡터나 행렬을 인수로 전달할 때 사용하고 읽기만 가능하다.


※ OutputArray 클래스

InputArray 클래스에서 상속을 받은 클래스이다. OpenCV 함수의 출력으로 사용될 벡터나 행렬을 인수로 전달할 때 사용하고 읽기와 쓰기가 가능하다.


※ InputOutputArray 클래스

OutputArray 클래스에서 상속을 받은 클래스이다. OpenCV 함수의 입출력으로 사용될 벡터나 행렬을 인수로 전달할 때 사용한다.


※ saturate_cast<T>

OpenCV는 saturate_cast<>의 템플릿을 사용하여 uchar, schar, ushort, short, int, unsigned 자료형을 변환하면 변수 또는 연산 수식의 값이 자료형의 표현 범위에 있도록 보장한다. 예를 들어 saturate_cast<uchar>(-1)의 결과는 0이며, saturate_cast<uchar>(300)의 결과는 255, saturate_cast<uchar>(2.6)은 가까운 정수 3이다.


※ 예외 처리

try 구문에서 CV_Error, CV_ERROR_, CV_Assert 매크로를 이용하여 예외를 발생시키고, catch 문장에서 cv::Exception 클래스로 처리할 수 있다. CV_Error와 CV_ERROR_ 는 if문을 함께 사용해야 한다.

- CV_Error(code, msg) : code는 Error::Code에 정의된 에러 코드이며, msg는 에러 메시지 문자열이다.

- CV_Error_(code, args) : code는 Error::Code에 정의된 에러 코드이며, args는 printf 스타일의 ("%d",a) 출력 양식을가진다.

- CV_Assert(expr) : expr 조건식이 거짓(false)이면 예외를 발생시킨다. 



+ Recent posts