resizeWindow() 함수는 winname에 해당하는 창 크기를 가로 width, 세로 height 크기에 맞게 변경합니다. 이때 함수의 인자로 전달하는 width와 height 크기는 창 전체 크기가 아니라 창의 뷰(view) 영역에 나타나는 영상 크기를 의미합니다. 그러므로 resizeWindow() 함수에 의해 변경된 창 크기는 창의 제목 표시줄, 경계선 두께로 인해 width와 height 크기보다 약간 큰 형태로 결정됩니다. 다만 WINDOW_AUTOSIZE 플래그를 사용하여 만들어진 영상 출력 창은 resizeWindow() 함수로 크기를 변경할 수 없습니다.
이번에는 Mat 클래스 객체에 저장된 영상 데이터를 화면에 출력하는 imshow() 함수에 대해 알아보겠습니다. imshow() 함수 원형은 다음과 같습니다.
void imshow(const String& winname, InputArray mat); |
|
• winname |
영상을 출력할 대상 창 이름 |
• mat |
출력할 영상 데이터(Mat 객체) |
imshow() 함수는 winname 창에 mat 인자로 전달된 영상 데이터를 출력합니다. mat 객체에 저장된 영상이 1채널 8비트 uchar 자료형으로 구성된 그레이스케일 영상이라면 픽셀 값을 그대로 그레이스케일 밝기 형태로 나타냅니다. mat 객체에 저장된 영상이 uchar 자료형을 사용하는 3채널 컬러 영상이라면 색상 채널이 파란색(Blue), 녹색(Green), 빨간색(Red) 순서로 되어 있다고 간주하여 색상을 표현합니다. 만약 mat 객체가 부호 없는 16비트 또는 32비트 정수형이라면 행렬 원소 값을 256으로 나눈 값을 영상의 밝기 값으로 사용합니다. 반면에 mat 객체가 32비트 또는 64비트 실수형 행렬이라면 행렬 원소에 255를 곱한 값을 밝기 값으로 사용합니다.7
7 OpenCV 4.0.0 버전의 경우, imshow() 함수에 8비트 uchar 자료형이 아닌 영상을 전달하면 프로그램 동작이 종료되는 버그가 있습니다. 만약 부호 없는 16비트 또는 32비트 정수형, 32비트 또는 64비트 실수형 행렬을 imshow() 함수에서 사용해야 한다면 OpenCV 4.0.1 이상 버전을 사용하기 바랍니다.