Opencv-python3,处理rtsp流视频-----踩坑总结+VideoCapture.get()详解:

2023-11-10

最近项目在用opencv处理rtsp流相机,中间也踩了很多坑,这里写篇博客帮助那些可能会遇到相似问题的同胞。

注:我这里同时用到了四个相机


1.电脑同时连接多个相机后,之后去打开rtsp相机时,初次打开特别耗时,甚至打开失败,在Win10上需要修改四个相机的网关,将其修改成不一样的网关,防止网关冲突。(推荐使用CMS软件去修改相机的一些参数和网络配置)

2.如果电脑性能有限制,将rtsp显示frame和处理每一frame的函数放在两个线程中分开执行,一个显示frame,一个对frame进行算法处理。(就是采用 多线程,消息队列等方式: python环境--(thread,queue,multiprocessing等其他多线程或多进程方式), PyQt5环境--(QThread,QTimer等其他多线程方式),可以多种组合搭配在一起使用,看个人喜好以及项目需求)

3. OpenCV 处理rtsp相机可能存在未捕获到帧或者卡帧的情况,中间可能会因为这一帧的错误造成很多乱七八糟的未知bug,这里附上处理的代码:

仅供参考:

# DEMO

import cv2

cap = cv2.VideoCapture('rtsp:*********你的rtsp地址:*********')
# 历史帧
oldFrame = 0.0     # float类型

print("开始")
while True:
	ret, frame = cap.read()
	# 当前帧的位置
	frameTag = cap.get(0)
	try:
		# 未获得帧
		if not ret:
			cap.release()
			cv2.destroyAllWindows()
			cap = cv2.VideoCapture('rtsp:*********你的rtsp地址:*********')
			ret,frame = cap.read()
		# 相机卡帧(一直卡在同一帧上):
		if (oldFrame == frameTag) and (oldFrame != 0.0):
			cap.release()
			cv2.destroyAllWindows()
			cap = cv2.VideoCapture('rtsp:*********你的rtsp地址:*********')
			ret,frame = cap.read()
		if ret:
			oldFrame = frameTag   # 成为历史帧
			cv2.imshow("Camera", frame)
			# 如果是waiteKey(0)就会一直等待
			if cv2.waitKey(1) & 0xFF == ord('q'):
				break
	except Exception:
		print("error")

下面是Opencv中,VideoCapture.get()的参数详解:

数值 解析
cv2.VideoCapture.get(0) 视频文件的当前位置(播放)以毫秒为单位
cv2.VideoCapture.get(1) 基于以0开始的被捕获或解码的帧索引
cv2.VideoCapture.get(2) 视频文件的相对位置(播放):0=电影开始,1=影片的结尾。
cv2.VideoCapture.get(3) 在视频流的帧的宽度
cv2.VideoCapture.get(4) 在视频流的帧的高度
cv2.VideoCapture.get(5) 帧速率
cv2.VideoCapture.get(6) 编解码的4字-字符代码
cv2.VideoCapture.get(7) 视频文件中的帧数
cv2.VideoCapture.get(8) 返回对象的格式
cv2.VideoCapture.get(9) 返回后端特定的值,该值指示当前捕获模式
cv2.VideoCapture.get(10) 图像的亮度(仅适用于照相机)
cv2.VideoCapture.get(11) 图像的对比度(仅适用于照相机)
cv2.VideoCapture.get(12) 图像的饱和度(仅适用于照相机)
cv2.VideoCapture.get(13) 色调图像(仅适用于照相机)
cv2.VideoCapture.get(14) 图像增益(仅适用于照相机)(Gain在摄影中表示白平衡提升)
cv2.VideoCapture.get(15) 曝光(仅适用于照相机)
cv2.VideoCapture.get(16) 指示是否应将图像转换为RGB布尔标志
cv2.VideoCapture.get(17) 暂时不支持
cv2.VideoCapture.get(18) 立体摄像机的矫正标注(目前只有DC1394 v.2.x后端支持这个功能)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Opencv-python3,处理rtsp流视频-----踩坑总结+VideoCapture.get()详解: 的相关文章

随机推荐

  • android 触摸屏校准软件,触摸屏软件(eGalaxTouch)下载_触摸屏软件(eGalaxTouch)官方下载-太平洋下载中心...

    eGalaxTouch是一款电子触摸屏驱动程序 电子触摸屏幕有时候是需要校准一下才能准确获取坐标点 这款软件可以帮助我们校准触摸屏参数 推荐有需要的用户下载使用 校准方法 1 下载 安装eGalaxTouch Android板子连接液晶屏
  • 线性表链式储存(图书管理系统)

    线性表链式储存和顺序储存各有优点 该笔记的一些说法是自己的理解 并不官方 首先我们要创建一个结构体用来储存书籍的相关属性信息 我称为数据结构体 储存一组待储存的数据 typedef struct book string bnum 书的编号
  • n个结点的无向完全图的生成树的个数

    头部闲扯 今天闲来在google搜了一下cantjie 突然发现我的博客竟然被引用过 很是惊讶 因为虽然仅仅只是过去一年 我现在看我去年写的博客 就有种 这写的什么垃圾玩意 的感觉 没想到竟然也会有人浏览并引用我的博客 想来这个博客闲置一年
  • Win10如何查看Nvidia支持的CUDA版本

    打开设置 在搜索里输入控制面板 打开控制面板 点击 硬件和声音 选项 然后选择Nvidia面板 在Nvidia面板中点击帮助 选择系统信息 选择组件 找到 NVCUDA DLL 即可看到支持的CUDA版本
  • 递归算法应用并使用分页

    递归算法应用并使用分页 直接上代码 注释很全 自己看 public List
  • eclipse中JUnit的使用

    一 JUnit单元测试概述 JUnit是一个Java语言的单元测试框架 JUnit有它自己的JUnit扩展生态圈 多数Java的开发环境都已经集成了JUnit作为单元测试的工具 Junit是一套框架 继承TestCase类 因此可以用Jun
  • java.io.FileNotFoundException: File does not exist: hdfs://xxx

    一 产生问题背景 我们公司正在准备从cdh迁回社区版hadoop集群 启动flink任务的时候 还未运行就直接报错 Caused by org apache flink yarn YarnClusterDescriptor YarnDepl
  • C#+sqlserver+asp.net婚纱影楼管理系统

    一 源码描述 这是一款简洁十分美观的ASP NET sqlserver源码 界面十分美观 功能也比较全面 比较适合 作为毕业设计 课程设计 使用 感兴趣的朋友可以下载看看哦 二 功能介绍 该源码功能十分的全面 具体介绍如下 婚纱影楼管理系统
  • ECEF和ENU坐标之间的转换

    转载 https gssc esa int navipedia index php Transformations between ECEF and ENU coordinates 1 定义 ENU coordinates local Ea
  • 我的第一个Java程序

    没想到从纯前端转到了JAVA Web 首先第一个 JAVA程序 计算图形面积 使用工厂模式和反射机制实现 Illegal modifier for the interface method paraNeed only public abst
  • redis高可用与集群实战案例

    一 配置redis主从 主备模式 可以实现 Redis 数据的跨主机备份 程序端连接到高可用负载的VIP 然后连接到负载服务器设置的Redis后端 real server 此模式不需要在程序里面配置 Redis 服务器的真实 IP 地址 s
  • vba17-25

    十七 变量默认值 简写变量 常量 1声明变量的同时赋值 数值 0 字符串 空字符串 布尔 False 变体 Empty 空 2 布尔值 false 0 True 1 所有非0的数字转换成布尔类型都是True 3变量定义简写 dim i in
  • 区块链基本特性

    区块链具有去中心化 不可篡改 不可逆 匿名等特性 去中心化 因为整个网络没有中心统治者 系统依靠的是网络上多个参与者的公平约束 所以任意每几个节点的权利和义务都是均等的 而且每一个节点都会储存这个区块链上所有数据 即使该节点被损坏或遭受攻击
  • 使用SWIG编写python的扩展

    环境 python3 8 5 64位 Visual Studio 2017 SWIG 4 0 2 一 安装SWIG https www swig org download html 下载windows 预编译好的文件 解压后把swig ex
  • 建立时间、保持时间、时钟输出延时、时钟偏斜、slack(公式整理)

    文章目录 一道华为笔试题 1 tclk最小周期tclk min 2 时钟建立时间Tsu 3 时钟保持时间Thold 4 时钟输出延时Tco 5 slack 6 时钟偏斜 答案 Reference 一道华为笔试题 1 tclk最小周期tclk
  • 数组的常用方法concat,join,slice和splice的区别,map,foreach,reduce

    1 concat 和join concat 是连对两个或两个数组的方法 直接可以将数组以参数的形式放入 join 是将数组中的所有元素放入一个字符串中 通俗点讲就是可以将数组转换成字符串 2 slice和splice的区别 相同点就是都是对
  • Maven Intellij 配置下载镜像

    在使用maven管理包的时候 总会出现包下载很慢的情况 所以这里我们使用阿里云的仓库来代替maven自己的仓库 来提高下载的速度 Maven 重新指定源 修改maven conf setting XML里面关于mirror的设置 具体内容如
  • 嵌入式Linux小项目之X210上QT5.6.2移植和开发环境搭建

    目录 一 QT背景知识介绍 1 常见GUI系统 2 QT的发展例程 3 QT如何跨平台 4 QT相关的其他一些名字 5 QT的网络资源 二 QT的官网资源开发环境搭建 1 QT官网资源 2 QT开发环境搭建 3 QT的linuxfb介绍 三
  • 在windows下搭建、配置nginx流媒体服务器,并进行rtmp流的推流、拉流测试

    在博主之前的博文 Ubuntu下安装 编译 运行nginx和nginx rtmp module 中讲述了在linux Ubuntu 下搭建nginx流媒体服务器的方法 下面讲述在windows下搭建nginx流媒体服务器的方法 使其支持rt
  • Opencv-python3,处理rtsp流视频-----踩坑总结+VideoCapture.get()详解:

    最近项目在用opencv处理rtsp流相机 中间也踩了很多坑 这里写篇博客帮助那些可能会遇到相似问题的同胞 注 我这里同时用到了四个相机 1 电脑同时连接多个相机后 之后去打开rtsp相机时 初次打开特别耗时 甚至打开失败 在Win10上需