앞서 2장에서 설명한 HelloCV 예제 프로그램은 lenna.bmp 영상이 화면에 나타난 상태에서 키보드의 아무 키나 누르면 프로그램이 종료했습니다. 만약 특정 키를 눌렀을 때에만 영상 출력 창을 닫게끔 만들려면 waitKey() 함수의 반환값을 조사해야 합니다. 예를 들어 lenna.bmp 영상을 화면에 출력한 상태에서 키보드의 Esc 키를 누를 때에만 창을 닫게끔 동작시키려면 소스 코드를 다음과 같이 작성할 수 있습니다.
Mat img = imread("lenna.bmp", IMREAD_GRAYSCALE); namedWindow("img"); imshow("img", img); while (true) { if (waitKey() = = 27) break; } destroyWindow("img");
이 소스 코드에서는 영상을 화면에 출력한 후, while (true) { … } 문장을 이용하여 while 블록을 무한히 수행하도록 설정하였습니다. 그리고 while 반복문 안에서는 if 조건문을 사용하여 조건이 참인 경우에만 while 반복문을 빠져나올 수 있도록 설정하였습니다. if 조건문에서는 waitKey() 함수를 호출하고, waitKey() 함수 반환값이 27인지를 검사합니다. 여기서 숫자 27은 키보드의 Esc 키에 해당하는 아스키 코드 값입니다.1 즉, 앞 소스 코드는 Esc 키를 누를 때에만 while 반복문을 빠져나오고, Esc 이외의 키를 누를 때에는 계속 while 반복문 안에서 머물게 됩니다.
1 참고로 키보드에서 Enter 키의 아스키 코드는 13이고, Backspace 키는 8, Tab 키는 9입니다.