>  기사  >  백엔드 개발  >  OpenCV를 사용하여 네트워크 카메라의 프레임에 액세스하려면 어떻게 해야 합니까?

OpenCV를 사용하여 네트워크 카메라의 프레임에 액세스하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-09 13:11:02516검색

How Can OpenCV Be Used to Access Frames from Network Cameras?

네트워크 카메라가 포함된 OpenCV: 종합 가이드

네트워크 카메라로 작업할 때 이미지 처리 및 분석 작업을 위해 프레임 데이터에 액세스하는 것이 종종 중요합니다. . 이 기사에서는 강력한 컴퓨터 비전 라이브러리인 OpenCV를 활용하여 네트워크 카메라에서 프레임을 효과적으로 가져오는 방법을 살펴봅니다.

문제 해결

사용자가 OpenCV 1.1pre1을 사용하는 네트워크 카메라. 카메라는 RTSP를 통해 MPEG4를 스트리밍하거나 HTTP를 통해 MJPEG를 스트리밍했습니다. 광범위한 연구에도 불구하고 사용자는 OpenCV에서 FFMPEG를 사용하는 데 어려움을 겪었습니다.

OpenCV 솔루션

OpenCV 버전 2.0 이상의 경우 아래에 C 코드 스니펫이 제공됩니다. 네트워크 카메라에서 프레임 검색:

#include "cv.h"
#include "highgui.h"
#include <iostream>

int main(int, char**) {
    cv::VideoCapture vcap;
    cv::Mat image;

    const std::string videoStreamAddress = "rtsp://cam_address:554/live.sdp"; 

    if(!vcap.open(videoStreamAddress)) {
        std::cout << "Error opening video stream or file" << std::endl;
        return -1;
    }

    cv::namedWindow("Output Window");

    for(;;) {
        if(!vcap.read(image)) {
            std::cout << "No frame" << std::endl;
            cv::waitKey();
        }
        cv::imshow("Output Window", image);
        if(cv::waitKey(1) >= 0) break;
    }   
}

코드에서 videoStreamAddress는 "http://user:pass@cam_address:8081/cgi/mjpg/mjpg.cgi?와 같은 MJPEG 스트림 주소일 수 있습니다. mjpg".

H.264 RTSP 스트림에서 프레임을 가져오려면 카메라의 API에서 특정 URL 명령 세부정보를 참조하세요. 예를 들어 Axis 네트워크 카메라의 RTSP 주소는 다음과 같습니다.

rtsp://10.10.10.10:554/axis-media/media.amp

이 솔루션은 기존 IplImage 구조보다 선호되는 cv::Mat 구조를 활용합니다. 이 코드는 프레임 표시를 위한 출력 창을 생성하여 각 imshow(...) 호출로 비효율적인 창 생성을 방지합니다.

위 내용은 OpenCV를 사용하여 네트워크 카메라의 프레임에 액세스하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.