3.4.2 OutputArray 클래스
많은 OpenCV 함수는 영상을 입력으로 받아 영상 처리를 수행하고, 그 결과를 다시 영상으로 생성하여 반환합니다. 이때 출력 영상을 함수의 return 구문으로 반환하는 것이 아니라 보통 OutputArray 클래스의 참조를 함수 인자로 사용하여 결과 영상을 전달합니다. OutputArray 클래스는 다음과 같이 이름 재정의가 되어 있습니다.
typedef const _OutputArray& OutputArray;
_OutputArray 클래스는 클래스 계층적으로 _InputArray 클래스를 상속받아 만들어졌습니다. 그러므로 _OutputArray 클래스도 Mat 또는 vector<T> 같은 타입의 객체로부터 생성될 수 있습니다. 다만 _OutputArray 클래스는 새로운 행렬을 생성하는 _OutputArray::create() 함수가 추가적으로 정의되어 있습니다. 그래서 OpenCV의 많은 영상 처리 함수는 결과 영상을 저장할 새로운 행렬을 먼저 생성한 후, 영상 처리 결과를 저장하는 형태로 구현되어 있습니다.
OutputArray 클래스도 InputArray와 마찬가지로 사용자가 직접 OutputArray 타입의 변수를 생성해서 사용하면 안 됩니다. OutputArray 타입으로 정의된 OpenCV 함수의 인자에는 Mat 또는 vector<T> 같은 타입의 변수를 전달하는 형태로 코드를 작성해야 합니다.
참고로 영상에 그림을 그리는 몇몇 OpenCV 함수는 입력 영상 자체를 변경하여 다시 출력으로 반환하는 경우가 있으며, 이러한 함수는 InputOutputArray 클래스 타입의 인자를 사용합니다. InputOutputArray 클래스는 클래스 이름에서 알 수 있듯이 입력과 출력의 역할을 동시에 수행할 때 사용됩니다.