• 3행 stopwatch.avi 파일을 불러와서 cap 객체를 생성합니다.
• 10~12행 비디오 프레임의 가로 크기와 세로 크기, 전체 프레임 수를 출력합니다.
• 14~15행 비디오 파일의 초당 프레임 수(FPS) 값을 받아 와서 출력합니다.
• 17행 FPS 값으로부터 각 프레임 사이의 시간 간격 delay(밀리초 단위)를 계산합니다.
• 21~23행 카메라 장치로부터 한 프레임을 받아 와서 frame 변수에 저장합니다. 만약 해당 프레임 영상이 비어 있으면 while 루프를 빠져나갑니다.
• 25행 현재 프레임을 반전하여 inversed 변수에 저장합니다.
• 27~28행 frame과 inversed에 저장된 정지 영상을 화면에 출력합니다.
• 30~31행 delay 시간만큼 키 입력을 기다리고, 만약 Esc 키가 눌리면 while 반복문을 빠져나갑니다.
코드 4-3의 video_in() 함수 실행 결과를 그림 4-2에 나타냈습니다. video_in() 함수가 정상적으로 실행되면 stopwatch.avi 동영상 파일로부터 매 프레임을 받아 와서 원본 프레임과 반전된 프레임을 각각 화면에 나타냅니다. 그리고 콘솔 창에는 프레임의 가로 크기와 세로 크기, 전체 프레임 수, FPS 값이 출력됩니다. 전체 프레임이 모두 출력되면 video_in() 함수는 자동으로 종료됩니다. 참고로 VideoCapture 클래스를 이용한 동영상 재생 시에는 동영상에 포함된 오디오는 출력되지 않습니다.
▲ 그림 4-2 동영상 파일 처리 예제 프로그램 실행 화면