더북(TheBook)

이 소스 코드는 cap.isOpened() 함수가 false를 반환하면 “Camera open failed!” 메시지를 출력하고 함수 진행을 종료합니다.

카메라 장치를 사용할 수 있는 상태라면 이제 카메라 장치로부터 프레임을 받아 올 수 있습니다. 하나의 프레임은 한 장의 정지 영상을 의미하기 때문에 Mat 클래스 객체에 저장할 수 있고, Mat 객체에 저장된 영상은 imshow() 함수를 사용하여 화면에 출력할 수 있습니다. 다음은 카메라로부터 일정 시간 간격마다 프레임을 받아 와서 화면에 출력하는 예제 코드입니다.

Mat frame;
while (true) {
  cap >> frame;
 
  imshow("frame", frame);
  waitKey(10);
}

이 예제 코드는 while 반복문을 무한으로 반복하면서 매 프레임을 화면에 출력합니다. while 반복문 안에서 일단 VideoCapture::operator >>() 연산자 재정의를 이용하여 카메라 장치로부터 프레임을 받아 와 frame 변수에 저장합니다. 그리고 imshow() 함수와 waitKey() 함수를 이용하여 받아 온 프레임을 화면에 출력합니다. waitKey() 함수의 인자에 0을 지정하면 사용자의 키 입력을 무한히 기다리기 때문에 카메라 혹은 동영상을 재생하는 경우에는 waitKey() 함수 인자에 보통 0보다 큰 정수를 입력해야 하며, 카메라 혹은 동영상 파일의 초당 프레임 수를 고려하여 충분히 작은 정수를 입력해야 합니다. 앞의 예제 코드에서는 waitKey() 함수에 10을 전달하였으므로 10ms 동안 기다린 후, 다음 프레임을 받아 오게 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.