首页 > 后端开发 > C++ > 如何使用 OpenCV 从 IP 摄像机捕获帧?

如何使用 OpenCV 从 IP 摄像机捕获帧?

Mary-Kate Olsen
发布: 2024-11-09 17:45:02
原创
694 人浏览过

How can I capture frames from IP cameras with OpenCV?

使用 OpenCV 从 IP 摄像机捕获帧

要使用 OpenCV 从 IP 摄像机捕获帧,您可以采用以下步骤:

  1. 包含必要的库:

    • 对于 OpenCV 2.0 或更高版本:

      • # include "cv.h"
      • #include "highgui.h"
    • 对于旧版本的 OpenCV(例如 1.1pre1):

      • #include "cv.h"
      • #include "highgui.h"
  2. 打开视频流:

    • 使用 cv::VideoCapture 打开视频流。例如:

      • cv::VideoCapture vcap("rtsp://cam_address:554/live.sdp"); // RTSP 流
      • cv::VideoCapture vcap("http://user:pass@cam_address:8081/cgi/mjpg/mjpg.cgi?.mjpg"); // MJPEG 流
  3. 读取帧:

    • 使用 vcap.read(image)将帧读入 cv::Mat 图像。
  4. 显示帧:

    • 使用 cv 创建输出窗口::namedWindow("输出窗口").
    • 使用 cv::imshow("输出窗口", image) 显示帧。
  5. 处理用户交互:

    • 使用 cv::waitKey() 等待用户输入或指定的时间间隔。

OpenCV 2.0 的示例代码:

#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";  // RTSP stream

    // Open the video stream and check if it's open
    if (!vcap.open(videoStreamAddress)) {
        std::cout << "Error opening video stream or file" << std::endl;
        return -1;
    }

    // Create output window for displaying frames.
    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;
    }

    return 0;
}
登录后复制

H.264 RTSP 流的更新:

从 H.264 RTSP 流中捕获帧OpenCV 2.0 或更高版本,您可以使用以下 URL 格式:

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

如果相机需要身份验证,请使用以下 URL 格式:

  • rtsp://用户名:[email protected]:554/axis-media/media.amp

以上是如何使用 OpenCV 从 IP 摄像机捕获帧?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板