OpenCV로 비디오를 출력해보도록 하겠습니다.
코드는 아래와 같습니다.
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace cv;
int main(int argc, char* argv[])
{
namedWindow("Example", cv::WINDOW_AUTOSIZE);
VideoCapture cap;
cap.open(string(argv[1]));
Mat frame;
for (; ;)
{
cap >> frame;
if (frame.empty())
break;
imshow("Example", frame);
if (waitKey(33) >= 0) break;
}
return 0;
}
※ OpenCV로 이미지 출력하기 포스팅에서 설명한 함수는 패스하겠습니다.
① VideoCapture cap;
cap.open(string(argv[1]));
다양한 코덱을 지원하는 VideoCapture 인스턴스 ‘cap’을 하나 만들었습니다. 이 인스턴스를 통해 비디오 파일의 Open/Close가 가능합니다.
open 함수를 사용하여 파일을 하나 열어보았습니다. 인스턴스 ‘cap’은 읽어들인 비디오파일의 모든 정보를 포함하며, 비디오의 시작 부분을 가리키게 됩니다.
② cap >> frame;
if (frame.empty()) break;
cv :: Mat frame은 비디오 프레임을 저장할 데이터 객체를 인스턴스화합니다.
반복문 내부에서 비디오 파일은 프레임 단위로 들어오게 되고, 더이상 로드할 프레임이 없으면 프로그램은 종료합니다.
③ if (waitKey(33) >= 0) break;
영상은 33ms로 재생됩니다. 재생 중에 키입력이 발생하면, 반복문은 종료됩니다. 프로그램 종료 시, 할당된 데이터는 자동으로 해제됩니다.