그런데 앞과 같이 코드를 작성하면 while 반복문을 빠져나올 수 없기 때문에 사용자가 프로그램을 종료시킬 수 없습니다. 그러므로 프로그램 동작 중 사용자가 키보드의 특정 키를 누를 때 종료할 수 있도록 코드를 추가하는 것이 좋습니다. 또한 혹시라도 카메라에서 정지 영상 프레임을 제대로 받아 오지 못하는 경우에 대한 예외 처리도 추가하는 것이 좋습니다. 이러한 예외 처리 코드를 추가한 소스 코드는 다음과 같습니다.
Mat frame; while (true) { cap >> frame; if (frame.empty()) break; imshow("frame", frame); if (waitKey(10) = = 27) // ESC key break; }
앞 소스 코드에는 while 반복문 안에 두 개의 if 조건문이 추가되었습니다. 첫 번째 if 문에서는 만약 카메라로부터 받아 온 frame 영상이 비어 있으면 while 반복문을 빠져나가도록 설정했습니다. 두 번째 if 문에서는 waitKey() 함수의 반환값을 조사하여, 만약 사용자의 키 입력이 있었고 해당 키 값이 27이면 while 루프를 빠져나오도록 설정했습니다. 여기서 정수 27은 키보드에서 Esc 키에 해당하는 키 값이며, 이 예제 코드는 사용자가 Esc 키를 누를 때 while 반복문을 빠져나오게 됩니다.
while 반복문 안에서 카메라로부터 프레임을 받아 왔다면 이후 각 프레임에 다양한 정지 영상 처리 기법을 적용할 수 있습니다. 예를 들어 카메라의 매 프레임에 대하여 영상의 반전을 수행하고, 그 결과를 화면에 같이 출력할 수 있습니다. 또는 앞으로 이 책에서 소개할 다양한 영상 처리 기법을 적용하여 사람의 얼굴을 검출하는 등 작업도 수행할 수 있습니다. 카메라 및 동영상 처리는 결국 매 프레임에 대한 정지 영상 처리와 같은 구조임을 기억하기 바랍니다.