실시간 웹캠 영상이나 가공된 이미지를 파일로 저장할 수 있는 핵심 도구인
OpenCV의 VideoWriter 클래스는 단순한 영상 저장을 넘어서,
코덱 설정, 프레임 속도 지정, 해상도 유지 등 다양한 컨트롤을 가능하게 해요.
VideoWriter란 무엇인가요?
cv::VideoWriter는 OpenCV에서 영상 파일을 생성하고 프레임을 저장하는 클래스예요.
이미지 시퀀스를 영상으로 만들거나 실시간으로 처리한 프레임을 동영상으로 저장할 때 사용돼요.
VideoWriter를 제대로 쓰기 위해선
출력 파일 이름, 코덱, 프레임 속도, 해상도 같은 필수 정보를 설정해야 해요.
특히 해상도는 입력 프레임의 크기와 정확히 일치해야 하며,
그렇지 않으면 저장이 실패하거나 영상이 깨질 수 있어요.
일반적으로 .avi, .mp4, .mov 등 다양한 포맷으로 저장할 수 있어요.
VideoWriter 초기화와 기본 예제
VideoWriter 객체는 생성자 또는 .open() 메서드를 통해 초기화할 수 있어요.
가장 핵심적인 요소는 코덱(fourcc)인데,
이 값은 압축 방식을 결정하며 'MJPG', 'XVID', 'mp4v' 등이 자주 쓰여요.
다음은 기본 사용 예제입니다.
int width = 640, height = 480; cv::VideoWriter writer("output.avi", cv::VideoWriter::fourcc('M','J','P','G'), 30, cv::Size(width, height)); |
위 코드는 output.avi라는 이름으로 30FPS, 640x480 해상도의 MJPG 코덱 영상 파일을 생성해요.
실시간 웹캠 영상 저장 예제
웹캠에서 입력 받은 프레임을 저장할 때는 VideoCapture와 VideoWriter를 함께 사용하면 돼요.
주의할 점은 입력 프레임 크기와 저장 크기가 일치해야 한다는 점이고,
이건 보통 첫 프레임의 rows, cols를 기반으로 설정해요.
cv::VideoCapture cap(0); cv::Mat frame; cap >> frame; cv::VideoWriter writer("record.avi", cv::VideoWriter::fourcc('M','J','P','G'), 30, frame.size()); while (true) { cap >> frame; if (frame.empty()) break; writer.write(frame); // 프레임 저장 cv::imshow("Live", frame); if (cv::waitKey(1) == 27) break; // ESC 키로 종료 } |
이 코드는 실시간 웹캠 영상을 그대로 record.avi로 저장하면서 화면에도 출력해줘요.
코덱과 파일 포맷에 따른 호환성
영상 저장 시 가장 자주 발생하는 오류는 코덱 미지원 또는 설치되지 않음 문제예요.
예를 들어 'XVID'나 'DIVX'는 AVI에 잘 맞고, 'mp4v'는 MP4에 적합하지만,
시스템에 해당 코덱이 설치되어 있어야 제대로 작동해요.
특히 Windows에서는 'MJPG'가 안정적이고,
Linux에서는 OpenCV가 FFMPEG을 사용할 경우
더 다양한 포맷을 지원해요.
파일 확장자와 코덱을 맞추는 것도 매우 중요해요.
cv::VideoWriter writer("video.mp4", cv::VideoWriter::fourcc('m','p','4','v'), 25, cv::Size(1280, 720)); |
이 코드는 MP4 파일을 저장하는 기본 포맷입니다.
단, 플랫폼에 따라 결과가 다를 수 있으니 꼭 확인하세요.
저장 종료와 자원 해제
영상 저장이 끝나면 .release() 메서드를 호출해 자원을 반드시 해제해야 해요.
이를 호출하지 않으면 파일이 정상적으로 마무리되지 않거나 재생이 안 될 수 있어요.
프로그램 종료 시점에 카메라와 VideoWriter를 모두 정리하고,
생성한 윈도우도 함께 닫아주는 것이 안정적인 코드 작성에 도움이 돼요.
cap.release(); writer.release(); cv::destroyAllWindows(); |
특히 영상 저장이 제대로 안 되는 경우,
release가 빠졌거나, 코덱이 안 맞는 경우가 많으니 꼭 확인해야해요.
이 블로그의 내용을 대화 형식인 음성으로 들으면서 정리하면, 보다 쉽게 이해할 수 있을 거예요.
다운받아 들어보세요~
'IT' 카테고리의 다른 글
OpenCV에서 프레임 단위 영상 처리 기법 (0) | 2025.06.28 |
---|---|
OpenCV VideoCapture 클래스 이해 및 활용 (0) | 2025.06.28 |
OpenCV로 실시간 웹캠 캡처하기 (0) | 2025.06.27 |
OpenCV에서 히스토그램 역투영 기법 사용하기 (0) | 2025.06.27 |
OpenCV를 활용한 템플릿 매칭 방법 (0) | 2025.06.27 |