cv :: VideoCapture适用于网络摄像头,但不适用于IP摄像头?

时间:2013-05-08 21:00:03

标签: opencv

它必须发生,我被困在我的项目的最后阶段,当我想在IP摄像机上使用我的代码时,它就像我的网络摄像头上的魅力一样。该URL在我的浏览器中完美运行,但OpenCV没有任何结果...... 这是我的代码:

#include <opencv/highgui.h>

using namespace cv;

int main(int argc, char *argv[])
{
    Mat frame;
    namedWindow("video", 1);
    VideoCapture cap("http://192.168.1.99:99/videostream.cgi?resolution=32&rate=0&user=admin&pwd=password&.mjpg");
    while ( cap.isOpened() )
    {
        cap >> frame;
        if(frame.empty()) break;

        imshow("video", frame);
        if(waitKey(30) >= 0) break;
    }

    return 0;
}

编译器设置:

//Added to the .pro file of QtCreator
INCLUDEPATH += C:\\OpenCV243\\release\\include
LIBS += -LC:\\OpenCV243\\release\\lib \
    -lopencv_core243.dll \
    -lopencv_highgui243.dll

我已经测试过使用相同的代码打开一个.avi文件,它可以工作......但像http://66.184.211.231/mjpg/video.mjpg这样的公共IP摄像机网址却没有!那怎么回事?

通过编辑删除:我认为FFMPEG是一个问题,但是v2.4.3。有内置的FFMPEG支持和.avi文件工作,虽然我没有安装任何FFMPEG库(注意解释?)

提前致谢,

此致 Mystère先生

2 个答案:

答案 0 :(得分:6)

通过从源的build \ x86 \ mingw \ bin文件夹中复制opencv_ffmpeg.dll并将其粘贴到构建的DLL旁边(通过PATH可访问的bin文件夹)来解决它:我不知道为什么,但是opencv_ffmpeg_64.dll有而是被生产出来了。

答案 1 :(得分:2)

由于您可以从网络摄像头连接和抓取帧,我认为您的磁带库设置正确,您应该能够连接到IP摄像机。我认为问题在于提供的相机URL地址。

尝试登录相机并禁用其密码保护。从URL中删除登录名和密码字段,因此它将类似于"http://192.168.1.99:99/videostream.cgi?resolution=32&.mjpg"。此外,您可以登录相机并检查其分辨率。我注意到你有resolution=32,但我认为它应该是resolution=704x480

希望这有帮助。