Python使用OpenCV实现视频流读取与逐帧截图保存
本文介绍如何使用Python的OpenCV库实现视频文件的读取与图片转换。通过VideoCapture接口加载视频流,利用while循环结合read()方法逐帧获取画面,并演示了实时显示窗口与将每一帧保存为独立JPEG图片文件的具体代码实现,适用于视频分析前的预处理场景。
视频流的实时读取与显示
首先进行视频读取操作。在Python环境中,通常使用OpenCV库的VideoCapture类来加载视频文件。代码中指定了视频文件的路径,例如'E:\\Video\\20000105_224116.dav'。程序进入一个无限循环,持续调用cap.read()方法读取视频帧。该方法返回两个值:ret布尔值和frame图像数据。如果ret为真,表示成功读取到一帧,程序通过cv2.imshow('input',frame)在窗口中实时显示当前画面。若读取失败(ret为假),则跳出循环。同时,程序监听键盘事件,当检测到ESC键(键值27)被按下时,也会终止循环。最后,调用cap.release()释放视频捕获对象,并使用cv2.destroyAllWindows()关闭所有OpenCV创建的窗口。
视频读取核心代码实现
import cv2
cap = cv2.VideoCapture('E:\\Video\\20000105_224116.dav') #地址
while(True):
ret,frame = cap.read()
if(ret):
# gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('input',frame)
else:
break
if cv2.waitKey(1)==27:
break
cap.release()
cv2.destroyAllWindows()
视频逐帧转换为图片文件
接下来实现将视频转化为图片的功能。核心逻辑同样是利用VideoCapture打开视频文件,例如'E:\\Video\\binggan.dav'。程序初始化一个计数器c用于记录帧序号,并通过vc.isOpened()检查视频是否成功打开。在while循环中,每次迭代先增加计数器c,然后调用vc.read()获取当前帧。如果读取成功,程序使用cv2.imwrite()函数将帧保存为图片文件。保存路径和文件名格式设定为'E:\\Video\\binggan\\'加上前缀'camera1_binggan',再拼接当前帧序号c,最后加上'.jpg'扩展名。保存成功后打印当前帧序号c以示进度。如果读取失败,则跳出循环。循环结束后,调用vc.release()释放视频资源。
图片保存代码实现
# -*- coding: utf-8 -*-
"""
Created on Mon Nov 5 15:21:15 2018
@author: chenjin10
"""
import cv2
vc = cv2.VideoCapture('E:\\Video\\binggan.dav')
c=0
rval=vc.isOpened()
while rval:
c = c + 1
rval, frame = vc.read()
if rval:
cv2.imwrite('E:\\Video\\binggan\\'+'camera1_binggan'+str(c) + '.jpg', frame) #命名方式
print(c)
else:
break
vc.release()
上述内容展示了利用Python和OpenCV进行视频读取及逐帧图片保存的完整流程。通过这两个示例,可以掌握如何从视频流中提取画面并保存为静态图像,这对于视频数据分析、模型训练数据准备等场景具有实用价值。希望这些代码示例能为您提供参考,欢迎继续支持相关技术分享。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









