OpenCV는 카메라를 쉽게 제어할 수 있는 인터페이스를 제공하기 때문에,
실시간 영상 처리를 시작할때 매우 유용합니다.
웹캠 캡처를 위한 기본 구조 이해하기
OpenCV에서 웹캠을 사용하려면 cv::VideoCapture 클래스를 활용해요.
기본 웹캠은 0번 인덱스로 접근하고, 여러 개의 카메라가 연결된 경우 1, 2 등으로 지정할 수 있어요.
카메라가 정상적으로 열렸는지 확인하는 것이 중요하며,
연속된 프레임을 읽어 들이는 루프가 기본 구조예요.
이 루프 안에서 이미지 처리, 키보드 이벤트 처리, 저장 등이 가능하죠.
cv::VideoCapture cap(0); if (!cap.isOpened()) { std::cerr << "카메라를 열 수 없습니다.\n"; return -1; } |
프레임을 읽고 화면에 출력하기
웹캠이 정상적으로 연결되었다면,
cap.read() 또는 cap >> frame 방식으로 프레임을 읽고,
imshow()로 출력할 수 있어요.
이 동작은 while 루프 안에서 반복되며, 프레임 단위로 실시간 영상이 처리돼요.
waitKey()는 화면 업데이트와 키 입력 처리를 동시에 해주므로 반드시 포함해야 해요.
아래는 영상 스트리밍의 기본 예제입니다.
cv::Mat frame; while (true) { cap >> frame; if (frame.empty()) break; cv::imshow("Webcam", frame); if (cv::waitKey(1) == 27) break; // ESC 키로 종료 } |
프레임에 실시간 처리 적용하기
캡처한 프레임에 다양한 필터나 분석 처리를 적용할 수 있어요.
예를 들어, 실시간으로 그레이스케일로 변환하거나,
엣지 검출, 얼굴 인식 같은 작업도 가능하죠.
이렇게 실시간 처리 결과를 바로 시각적으로 확인하면서 디버깅하거나 결과를 저장할 수 있어요.
cv::Mat gray; cv::cvtColor(frame, gray, cv::COLOR_BGR2GRAY); cv::imshow("Grayscale", gray); |
프레임 저장 및 영상 녹화하기
웹캠으로 촬영한 프레임을 이미지나 영상으로 저장할 수도 있어요.
이미지 저장은 imwrite() 함수로 간단하게 처리되고,
영상 녹화는 VideoWriter 클래스를 사용해 코덱, 해상도, FPS 등을 설정한 뒤 사용해요.
특히 영상 저장 시에는 프레임 크기와 VideoWriter 설정이 정확히 일치해야 오류 없이 저장됩니다.
cv::VideoWriter writer("output.avi", cv::VideoWriter::fourcc('M','J','P','G'), 30, cv::Size(640, 480)); writer.write(frame); // while 루프 안에서 계속 호출 |
종료 및 자원 정리하기
웹캠 사용이 끝났을 때는 반드시 release()를 호출해서 자원을 해제해야 해요.
또한, 생성한 모든 창도 destroyAllWindows()를 통해 닫아주는 것이 좋습니다.
이 과정을 누락하면 프로그램이 종료되지 않거나,
카메라가 다음 실행에서 열리지 않는 문제가 생길 수 있어요.
cap.release(); cv::destroyAllWindows(); |
이처럼 기본적인 웹캠 캡처 구조만 이해하고 있으면,
실시간 영상 처리 프로젝트의 출발점을 쉽게 잡을 수 있어요.
이 블로그의 내용을 대화 형식인 음성으로 들으면서 정리하면, 보다 쉽게 이해할 수 있을 거예요.
다운받아 들어보세요~
'IT' 카테고리의 다른 글
OpenCV에서 히스토그램 역투영 기법 사용하기 (0) | 2025.06.27 |
---|---|
OpenCV를 활용한 템플릿 매칭 방법 (0) | 2025.06.27 |
OpenCV Hough 변환을 활용한 직선 및 원 검출 (0) | 2025.06.27 |
OpenCV에서 윤곽선(contour) 검출과 그리기 (0) | 2025.06.26 |
OpenCV로 엣지 검출: Canny 알고리즘 설명과 활용 (0) | 2025.06.26 |