본문 바로가기

IT

OpenCV로 실시간 웹캠 캡처하기

OpenCV는 카메라를 쉽게 제어할 수 있는 인터페이스를 제공하기 때문에, 
실시간 영상 처리를 시작할때 매우 유용합니다.

 

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();

 

이처럼 기본적인 웹캠 캡처 구조만 이해하고 있으면,

실시간 영상 처리 프로젝트의 출발점을 쉽게 잡을 수 있어요.

 

이 블로그의 내용을 대화 형식인 음성으로 들으면서 정리하면, 보다 쉽게 이해할 수 있을 거예요.
다운받아 들어보세요~

OpenCV로 실시간 웹캠 캡처하기.mp3
3.95MB