Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用OpenCV访问IP摄像机_C++_Opencv_Video Streaming_Ip Camera - Fatal编程技术网

C++ 使用OpenCV访问IP摄像机

C++ 使用OpenCV访问IP摄像机,c++,opencv,video-streaming,ip-camera,C++,Opencv,Video Streaming,Ip Camera,下面给出的代码用于使用OpenCV访问Axis IP摄像头。在运行程序时,它首先显示打开cap\u ffmpeg\u impl时出错。。。然后显示“未找到摄影机” 哪里出了问题?我在尝试使用公共IP摄像头显示IP摄像头时遇到了类似的问题。Opencv需要一些典型的URL来打开相机。请尝试下面代码中的URL。 这是为我工作的代码 int main(int, char**) { cv::VideoCapture vcap; cv::Mat image; // This wo

下面给出的代码用于使用OpenCV访问Axis IP摄像头。在运行程序时,它首先显示打开cap\u ffmpeg\u impl时出错。。。然后显示“未找到摄影机”


哪里出了问题?

我在尝试使用公共IP摄像头显示IP摄像头时遇到了类似的问题。Opencv需要一些典型的URL来打开相机。请尝试下面代码中的URL。 这是为我工作的代码

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

    // This works on a D-Link CDS-932L
    const std::string videoStreamAddress = "http://ID:PASSWORD@IPADDRESS:PORTNO/mjpeg.cgi?user=ID&password=ID:PASSWORD&channel=0&.mjpg";
       //open the video stream and make sure it's opened
    if(!vcap.open(videoStreamAddress)) {
        std::cout << "Error opening video stream or file" << std::endl;
        return -1;
    }

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

        if(cv::waitKey(1) >= 0) break;
    }   

}
按原样复制此代码并重试

#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <iostream>
int main(int, char**) {
    cv::VideoCapture vcap;
    cv::Mat image;

    // This works on a D-Link CDS-932L

    const std::string videoStreamAddress = "http://USER:PWD@IPADDRESS:8088/mjpeg.cgi?user=USERNAME&password=PWD&channel=0&.mjpg";
       //open the video stream and make sure it's opened
    if(!vcap.open(videoStreamAddress)) {
        std::cout << "Error opening video stream or file" << std::endl;
        return -1;
    }

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

        if(cv::waitKey(1) >= 0) break;
    }   

}

以下适用于通过以太网电缆连接到我的计算机的轴M1004-W:

在您选择的浏览器中,我正在使用Chrome,导航到相机的IP地址。必要时提供凭证。 你应该从你的相机里看到一条实时流。在视频流上单击鼠标右键,然后在非Chrome浏览器中选择Inspect Element或其等效项。 您应该会看到一个名为src的变量—这是您可以在OpenCV中直接访问相机的变量。我的是/mjpg/video.mjpg,我打赌你的也会是类似的。 您给OpenCV的地址应如下所示:

http://<USERNAME>:<PASSWORD>@<IP_ADDRESS>/<the value of src>

我在您的代码中输入了我的地址,可以从OpenCV窗口查看视频流。

我在iphone上安装了迷你网络摄像头应用程序,并将其用作ip摄像头,地址为。此外,我还使用了以下代码:

VideoCapture capture;
Mat image;
if (!capture.open("http://192.168.1.103/video.cgi?.mjpg")) {
    cout << "Error opening video stream or file" << endl;
    return -1;
}
....

它可以工作。

确保所有编解码器都以某种方式安装在您的系统上。或者,您是否已成功地从本地计算机打开它?通过放置本地路径而不是url来测试它?您可以尝试手动下载并安装ffmpegOh,好的。在使用FFMPEG之前必须安装它?您需要更改您提供给VideoCapture的URLcaphttp://IPADDRESS/video.mjpg;查看您是否能够从浏览器正确地流式传输摄像头?如何找到IP摄像头的端口号?您可以从IP摄像头的web界面获取端口号。此外,axis 1103的流式传输链接是:那么,我应该提供什么链接?带有用户名和密码的链接?下面是一个可能对您有所帮助的快捷方式。如果您了解iSpy软件,它提供了所有可能用于显示摄像头的链接。此外,它还要求您,iSpy应选择最适合显示视频的URL,让iSpy选择链接,尝试在您的程序中使用相同的链接,这可能会起作用。如果提供的答案解决了问题,请标记它,以便其他人也可以使用相同的链接。
http://uname:login@192.168.0.0/mjpg/video.mjpg
VideoCapture capture;
Mat image;
if (!capture.open("http://192.168.1.103/video.cgi?.mjpg")) {
    cout << "Error opening video stream or file" << endl;
    return -1;
}
....