Python3结合OpenCV实现RTSP视频流本地保存
本文介绍如何使用Python3与OpenCV库将网络视频流(如RTSP)实时保存为本地视频文件。通过VideoCapture获取流数据,利用VideoWriter进行编码写入,并支持对每一帧图像执行识别或增强等处理操作,最终生成完整的本地视频文件。
基于Python3与OpenCV 3.3.1环境,实现将网络视频流保存为本地视频文件的具体方案如下。
首先,利用OpenCV中的VideoCapture类建立视频流连接,并通过cv2相关方法获取该视频流的帧率(FPS)以及每帧图像的分辨率大小。
接着,使用VideoWriter类配置视频编码格式,用于后续的视频文件写入操作。
通过VideoCapture对象的read()方法,对视频流进行逐帧解码,提取出每一帧图像数据。
在获取到每一帧frame后,可在此基础上执行各类图像算法处理,例如目标识别、图像增强或灰度变换等。
import cv2
from matplotlib import pyplot as plt
#通过cv2中的类获取视频流操作对象cap
cap = cv2.VideoCapture('rtsp://admin:passwd@10.130.10.111:554/MPEG-4/ch1/main/av_stream')
#调用cv2方法获取cap的视频帧(帧:每秒多少张图片)
fps = cap.get(cv2.CAP_PROP_FPS)
print(fps)
#获取cap视频流的每帧大小
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print(size)
#定义编码格式mpge-4
fourcc = cv2.VideoWriter_fourcc('M', 'P', '4', '2')
#定义视频文件输入对象
outVideo = cv2.VideoWriter('saveDir.avi',fourcc,fps,size)
#获取视频流打开状态
if cap.isOpened():
rval,frame = cap.read()
print('ture')
else:
rval = False
print('False')
tot=1
c=1
#循环使用cv2的read()方法读取视频帧
while rval:
rval,frame = cap.read()
cv2.imshow('test',frame)
#每间隔20帧保存一张图像帧
# if tot % 20 ==0 :
# cv2.imwrite('cut/'+'cut_'+str(c)+'.jpg',frame)
# c+=1
tot+=1
print('tot=',tot)
#使用VideoWriter类中的write(frame)方法,将图像帧写入视频文件
outVideo.write(frame)
cv2.waitKey(1)
cap.release()
outVideo.release()
cv2.destroyAllWindows()
最终保存结果如下所示:

以上为本文的全部内容,希望能为读者的学习提供有益参考,同时也欢迎大家继续支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









