그런데 imshow() 함수의 두 번째 인자 자료형이 InputArray라고 되어 있는 점이 조금 특이합니다. 앞서 HelloCV 소스 코드에서 imshow() 함수를 사용할 때에는 imshow() 함수의 두 번째 인자에 Mat 클래스 타입의 변수를 전달했습니다. HelloCV 프로그램에서 사용했던 소스 코드를 다시 써 보면 다음과 같습니다.
Mat img = imread("lenna.bmp"); namedWindow("image"); imshow("image", img);
앞 코드에서 img는 Mat 클래스 타입의 변수이지만 imshow() 함수의 두 번째 인자로 전달된 것을 볼 수 있습니다. 사실 InputArray 타입은 Mat, vector<T> 등 다양한 객체를 표현할 수 있는 인터페이스 클래스이며, 주로 OpenCV 함수 입력에 해당하는 인자의 자료형으로 사용됩니다. 그러므로 OpenCV 함수 설명에서 인자 타입이 InputArray라고 되어 있으면 대부분 Mat 클래스 타입의 변수를 전달한다고 생각하여도 무방합니다. InputArray 타입에 대해서는 3.4.1절에서 좀 더 자세히 설명하겠습니다.
만약 imshow() 함수가 호출되는 시점에 winname에 해당하는 창이 없으면 imshow() 함수는 자동으로 WINDOW_AUTOSIZE 속성의 창을 새로 만들어서 영상을 출력합니다.8 참고로 Windows 운영 체제에서는 Ctrl+C 키를 눌러 영상 출력 창에 나타난 영상 데이터를 비트맵 형식으로 클립보드로 복사할 수 있으며, Ctrl+S 키를 눌러서 파일 형태로 저장할 수 있습니다.
8 이러한 동작 특성을 이용하여 이 책의 많은 예제 코드에서 namedWindow() 함수 호출을 생략하고 있습니다.