더북(TheBook)

3.4.1 InputArray 클래스

OpenCV 문서 사이트를 보면 InputArray 타입의 인자를 사용하는 함수를 자주 볼 수 있습니다. 영상의 화면 출력 함수인 imshow() 함수도 영상을 InputArray 타입으로 전달하도록 선언되어 있습니다. InputArray 클래스는 Mat, vector<T> 등 다양한 타입을 표현할 수 있는 인터페이스 클래스로서 주로 OpenCV 함수의 입력 인자 자료형으로 사용됩니다.

InputArray 클래스는 다음과 같은 형태로 이름 재정의되어 있습니다.

typedef const _InputArray& InputArray;

InputArray 클래스를 완벽하게 이해하려면 _InputArray 클래스의 정의부터 살펴봐야 하겠지만, 사실 _InputArray 클래스 정의를 여러분이 직접 분석할 필요는 없습니다. _InputArray 클래스는 단순히 사용의 편의성을 위해 만들어진 구현체일 뿐이며 내부 인터페이스는 향후 필요에 따라 변경될 수도 있습니다. 그러므로 OpenCV 함수 인자에서 InputArray 클래스가 사용될 때 사용자가 어떻게 해석해야 하는지에 대해서만 이해하는 것이 중요합니다.

_InputArray 클래스는 Mat, Mat_<T>, Matx<T, m, n>, vector<T>, vector< vector<T> >, vector<Mat>, vector<Mat_<T> >, UMat, vector<UMat>, double 같은 다양한 타입으로부터 생성될 수 있는 인터페이스 클래스입니다.13 _InputArray 클래스는 OpenCV 라이브러리 내부에서 코드 구현 편의상 사용되며, 사용자가 명시적으로 _InputArray 클래스의 인스턴스 또는 변수를 생성하여 사용하는 것을 금지하고 있습니다. 즉, OpenCV 도움말 페이지에서 특정 함수의 인자가 InputArray 타입을 받도록 설명되어 있다면 Mat 클래스 객체 또는 vector<T> 타입의 변수를 전달하는 형태로 코드를 작성해야 합니다. 만약 InputArray 타입의 함수 인자에 비어 있는 행렬을 전달하려면 함수 인자에 noArray() 또는 Mat()를 입력해야 합니다.

 

13 _InputArray 클래스를 생성하는 방법 중 UMat 클래스는 OpenCL 기능을 사용하는 OpenCV 행렬 표현 클래스입니다. OpenCL에 대한 설명은 https://opencv.org/platforms/opencl.html을 참고하세요.

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