OpenCV VideoCapture 클래스 이해 및 활용
실시간 영상 처리의 핵심 클래스인 OpenCV VideoCapture 클래스는
웹캠, 동영상 파일, IP카메라 스트림 등 다양한 영상 소스를 다루는 핵심 인터페이스예요.
영상 처리의 시작은 VideoCapture에서 시작된다고 해도 과언이 아니예요.
VideoCapture란 무엇인가요?
cv::VideoCapture는 영상 소스를 불러오는 데 사용하는 클래스예요.
이 클래스는 카메라 번호(예: 0, 1), 영상 파일 경로,
혹은 RTSP 스트림 주소 등을 받아서 프레임을 하나씩 읽어올 수 있게 해줘요.
실시간 웹캠 영상 처리뿐만 아니라,
저장된 동영상을 분석하거나 네트워크 영상 스트림을 처리할 때도
모두 이 클래스를 활용해요.
생성자나 .open() 메서드로 장치 또는 파일을 연결하고,
isOpened()로 정상 연결 여부를 확인하는 것이 일반적인 패턴이에요.
cv::VideoCapture cap(0); // 0번 웹캠 if (!cap.isOpened()) { std::cerr << "카메라를 열 수 없습니다.\n"; } |
프레임 읽기와 루프 구성
연결된 영상 소스로부터 프레임을 읽으려면 .read() 함수나 >> 연산자를 사용해요.
일반적으로 while 루프 안에서 프레임을 반복해서 읽고,
실시간 처리하거나 출력하게 되죠.
프레임이 비어있지 않은지 확인하고,
특정 키 입력(예: ESC 키)을 감지하여 루프를 빠져나오는 식으로 구성돼요.
이 기본 구조는 실시간 영상 처리의 가장 핵심적인 틀이에요.
cv::Mat frame; while (true) { cap >> frame; if (frame.empty()) break; cv::imshow("Frame", frame); if (cv::waitKey(1) == 27) break; // ESC 키로 종료 } |
영상 소스에 따른 활용 방법 차이
VideoCapture는 다양한 입력을 처리할 수 있어요.
숫자 인자는 웹캠이고, 문자열 경로는 동영상 파일, URL은 IP 카메라 스트림이에요.
예를 들어, cap.open("video.mp4")는 파일을 열고,
cap.open("rtsp://...")는 실시간 네트워크 스트림을 가져올 수 있어요.
각 소스마다 네트워크 지연, 코덱, FPS 등이 달라지므로, 설정 값을 꼭 점검해야 해요.
cv::VideoCapture cap("sample_video.mp4"); if (!cap.isOpened()) { std::cerr << "영상 파일을 열 수 없습니다.\n"; } |
프레임 속성 제어와 조회
VideoCapture는 영상의 속성값을 확인하거나 설정할 수 있는 메서드들을 제공해요.
대표적으로 .get()과 .set()을 사용해서 해상도, FPS, 밝기 등을 다룰 수 있어요.
하지만 모든 장치나 파일에서 설정이 적용되는 것은 아니므로, 지원 여부를 확인해야 해요.
특히 저장을 염두에 두고 있을 경우에는 .
get(CAP_PROP_FRAME_WIDTH)와 .get(CAP_PROP_FRAME_HEIGHT)로
해상도를 미리 알아두는 것이 중요해요.
double width = cap.get(cv::CAP_PROP_FRAME_WIDTH); double height = cap.get(cv::CAP_PROP_FRAME_HEIGHT); double fps = cap.get(cv::CAP_PROP_FPS); std::cout << "해상도: " << width << "x" << height << ", FPS: " << fps << "\n"; |
자원 해제와 종료 처리
영상 캡처를 마쳤다면 반드시 release()로 장치를 해제해야 해요.
윈도우 시스템에서는 이를 호출하지 않으면 다음 실행에서 카메라를 열 수 없는 경우도 생겨요.
또, 생성한 윈도우는 destroyAllWindows()를 통해 깔끔하게 닫아줘야
메모리 누수나 잔상 문제를 방지할 수 있어요.
이 종료 처리는 항상 프로그램의 마지막 단계에서 넣어주는 습관을 들이면 좋아요.
cap.release(); cv::destroyAllWindows(); |
이 블로그의 내용을 대화 형식인 음성으로 들으면서 정리하면, 보다 쉽게 이해할 수 있을 거예요.
다운받아 들어보세요~
'IT' 카테고리의 다른 글
OpenCV에서 프레임 단위 영상 처리 기법 (0) | 2025.06.28 |
---|---|
OpenCV로 영상 저장하기: VideoWriter 사용법 (0) | 2025.06.28 |
OpenCV로 실시간 웹캠 캡처하기 (0) | 2025.06.27 |
OpenCV에서 히스토그램 역투영 기법 사용하기 (0) | 2025.06.27 |
OpenCV를 활용한 템플릿 매칭 방법 (0) | 2025.06.27 |