opencv读取网络摄像头的环境配置

本文档介绍了在Ubuntu 18.04系统中,如何安装必要的依赖包,如FFmpeg及相关组件,以支持OpenCV的cmake配置。通过设置-DWITH_FFMPEG选项来启用FFmpeg支持。接着展示了一个使用OpenCV从RTSP流读取并显示视频帧的C++示例代码,该示例中包含了opencv的imshow函数,用于图像显示。

我的环境是ubuntu18.04,在执行opencv的cmake之前先装以下依赖包:

apt install pkg-config
apt install ffmpeg
apt install libavformat-dev
apt install libavcodec-dev
apt install libswresample-dev
apt install libswscale-dev
apt install libavutil-dev
apt install libsdl1.2-dev
apt install libgtk2.0-dev

其中libgtx是用到了cv::imshow,需要显示输出。

最后在opencv中:

cmake -D WITH_FFMPEG=ON ..

最后,调用示例如下:

#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{    
	 string s_rtsp = "rtsp://admin:123456@10.10.10.3/Streaming/Channels/1";
	 VideoCapture camer_cap;
	 camer_cap.open(s_rtsp);     //打开视频
	 if (camer_cap.isOpened())   //如果视频不能正常打开则返回
	{
    //获取指定视频类的相关参数信息
    // int width = cap.get(CV_CAP_PROP_FRAME_WIDTH);  //帧宽度
    //int height = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //帧高度
     //int frameRate = cap.get(CV_CAP_PROP_FPS);  //帧率 x frames/s
     //int totalFrames = cap.get(CV_CAP_PROP_FRAME_COUNT); //总帧数
		Mat frame;    //定义Mat变量,用来存储每一帧 
		namedWindow("video");   
		while (camer_cap.read(frame))   ///读取当前帧方法
		{
			imshow("video", frame);//frame图像尺寸是1080x1920   //显示一帧画面 
			waitKey(30);   ; //延时30ms 
		}
	}
	 else
	 {
		 cout << "error when cam open" << endl;
	 }
	 camer_cap.release(); ;//释放资源
	 return 0;
}

### 使用 OpenCV 从 IP 摄像头网络摄像头读取视频流 要通过 Python 和 OpenCV 库实现从 IP 摄像头网络摄像头读取视频流的功能,可以按照以下方法操作: #### 安装依赖库 首先需要安装 `opencv-python` 库以及可能需要用到的其他辅助库。如果尚未安装该库,则可以通过 pip 进行安装: ```bash pip install opencv-python ``` 对于某些特定场景下的需求(如 RTSP 流),还需要额外配置环境支持。 --- #### 实现代码示例 以下是基于 OpenCV 的基本代码框架用于获取并显示来自 IP 摄像头的实时视频流: ```python import cv2 def read_ip_camera_stream(ip_address, username=None, password=None): """ 从指定地址读取IP摄像机的视频流 参数: ip_address (str): IP摄像机的URL或者RTSP路径。 username (str, optional): 如果有认证则提供用户名. password (str, optional): 对应密码. 返回: None """ # 构建完整的 URL 或者 RTSP 路径字符串 if username and password: url = f"rtsp://{username}:{password}@{ip_address}/stream" else: url = ip_address cap = cv2.VideoCapture(url) if not cap.isOpened(): print(f"无法打开摄像头 {url}") exit() while True: ret, frame = cap.read() if not ret: print("未能接收到来自摄像头的画面数据...") break # 显示图像窗口 cv2.imshow('IP Camera Stream', frame) # 按下 'q' 键退出循环 if cv2.waitKey(1) & 0xFF == ord('q'): break cap.release() # 关闭 VideoCapture 对象 cv2.destroyAllWindows() # 清理所有已创建的窗口 if __name__ == "__main__": camera_url = "http://your.ip.address/video.mjpg" # 替换为实际的IP摄像头地址 read_ip_camera_stream(camera_url) ``` 上述脚本展示了如何设置一个简单的程序来捕捉和展示由 IP 摄像头发来的视频流[^2]。 注意:不同型号的 IP 摄像头可能会有不同的访问协议和支持方式。例如,部分设备仅支持 HTTP GET 请求形式的 MJPEG 流;而另一些更高级别的产品则倾向于采用 RTSP 协议传输 H.264 编码后的高质量影像资料[^3]。 --- #### 处理常见问题 当尝试连接至某个具体品牌型号比如海康威视旗下的萤石系列时(CS-C3S-52WEFR),除了常规步骤外还需特别关注其官方文档说明里提到的一些特殊参数设定情况。一般情况下,默认端口号可能是固定的或者是可选范围内的某几个值之一。 另外,在跨平台部署过程中也需要注意操作系统差异可能导致的行为不一致现象——Linux 下面往往表现得更加稳定可靠一些相比 Windows 来说[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值