OpenCV捕获视频Ubuntu 12.0.4

时间:2014-05-15 09:39:24

标签: c++ opencv ubuntu

我需要帮助解决一个奇怪的问题。

我在Ubuntu 12.0.4中做了一个用于捕获视频的简单应用程序我正在使用带有C ++的eclipse和OpenCV库。所以问题是我正在使用一种IPcameras,一切都很完美,这是我工作的代码:

int main(int argc, char *argv[])
{
    cv::VideoCapture cap("http//:192.168.1.11:80/videostream.cgi?resolution=320x240&rate=0&user=admin&pwd=admin&.mjpg");

    cv::Mat frame;
    cv::namedWindow("video");

    cvMoveWindow("video", 0, 0);

    while ( cap.isOpened() )
    {       
        cap >> frame;

        if(frame.empty()) break;

        cv::imshow("video", frame);

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

    return 0;
}

这非常好。我的问题是,现在我必须与其他IPcameras一起工作,我不知道为什么它不起作用,我使用相同的代码(更改Ip),而且应用程序就像思考一样。事情是我可以通过浏览器看到相机,所以相机工作,然后我认为应该是捕获结构的代码问题,但我尝试了很多组合,没有,我检查IPcamera文档,没有什么。

3 个答案:

答案 0 :(得分:2)

我找到了解决方案,最后问题是我使用的IP摄像机使用“rtsp”协议,但我试图使用http。

我不得不使用“rtsp”

谢谢大家的帮助。

答案 1 :(得分:1)

您的IP地址格式不正确(使用http://代替http//:

int main(int argc, char *argv[])
{
    cv::VideoCapture cap("http://192.168.1.11:80/videostream.cgi?resolution=320x240&rate=0&user=admin&pwd=admin&.mjpg");
    cv::Mat frame;
    cv::namedWindow("video");

    ...
}

:必须立即遵循协议名称(http)

答案 2 :(得分:-1)

尝试使用以下代码捕获....

if(cap.isOpened())
{
while ( cap.grab() )
    {       
        cap.retrieve(frame);

        cv::imshow("video", frame);

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