读取视频
import cv2 as cv
# 视频读写
'''
在OpenCV中我们要读取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件
1.创建读取视频的对象
cap=cv.VideoCapture(filepath)
参数:
filepath:视频文件路径(也可以指定为摄像头)
2.视频的属性信息
2.1.获取视频的某些属性
retval=cap.get(proId)
参数:
proId:从0到18的数字,每个数字表示视频的属性
常用属性有:
索引 flags 意义
0 cv.CAP_PROP_POS_MSEC 视频文件的当前位置
1 cv.CAP_PROP_POS_FRAMES 从0开始索引帧,帧位置
2 cv.CAP_PROP_POSAVI_RATRIO 视频文件的相对位置(0表示开始,1表示结束)
3 cv.CAP_PROP_FRAME_WIDTH 视频流的帧宽度
4 cv.CAP_PROP_FRAME_HEIGHT 视频流的帧高度
5 cv.CAP_PROP_FPS 帧率
6 cv.CAP_PROP_FOURCC 编解码器四字符代码
7 cv.CAP_PROP_FRAME_COUNT 视频文件的帧
2.2修改视频的属性信息
cap.set(proid,value)
参数:
proid:属性的索引,与上面的对应
value:修改后的属性值
3.判断图像时候读取成功
isornot=cap.isOpened()
参数:
若读取成功返回True,否则False
4.获取视频的每一帧图像
ret,frame=cap.read()
参数:
ret:若获取成功返回True,否则False
frame:获取到的某一帧图像
5.调用cv.imshow()显示图像,在显示图像时用cv.waitkey()设置适当的持续时间,如果太低
视频会播放非常快,如果太高就会播放非常慢,通常情况下设置为25ms
6.最后,调用cap.release()将视频释放掉
'''
#创建读取视频的对象
cap=cv.VideoCapture('video/demo.mp4')
cap.open(0) #读取摄像头
#判断是否读取成功
while cap.isOpened():
#获取每一帧图像
ret,frame=cap.read()
#如果获取成功就显示图像
if ret:
cv.imshow('frame',frame)
#每一帧间隔为25ms 或者按q退出
if cv.waitKey(25) & 0xFF == ord('q'):
break
#释放视频对象
cap.release()
cv.destroyAllWindows()
2.写入视频
import cv2 as cv
#视频保存
'''
在OpenCV中保存视频使用的是VideoWriter对象,在其中指定输出文件的名称,如下所示:
1.创建视频写入对象
out=cv.VideoWriter(filename,fourcc,fps,frameSize)
参数:
filename:视频保存的位置
fourcc:指定视频编解码器的4字节代码
fps:帧率
frameSize:帧大小
设置视频的编解码器如下所示:
retval=cv.VideoWriter_fourcc(c1,c2,c3,c4)
参数:
c1,c2,c3,c4:是视频编解码器的4字节代码,在fourcc.org中找到可用代码列表
与平台紧密相关
在windows中:DIVX(.avi)
在OS中:MJPG(.mp4),DIVX(.avi),X264(.mkv)
.利用cap.read()获取视频中的每一帧图像,并使用out.write()将某一帧图像写入视频中
.使用cap.release()和out.release()释放资源
'''
#创建视频读取对象
cap=cv.VideoCapture()
cap.open('video/demo.mp4') #打开视频
#获取视频的宽和高 并转换从整数
frame_width=int(cap.get(3))
frame_height=int(cap.get(4))
#创建视频写入对象
fourcc=cv.VideoWriter_fourcc('M','J','P','G') #编码格式
out=cv.VideoWriter('video/save_test.mp4',fourcc,25,(frame_width,frame_height))
#判断是否打开成功
while cap.isOpened():
#读取每一帧图像
ret,frame=cap.read()
#判断是否读取成功
if ret:
#写入每一帧图像
out.write(frame)
# cv.imshow('frame',frame)
else:
break
#延迟25ms显示(即帧率设置为25ms)
# cv.waitKey(25)
#释放资源
cap.release()
out.release()
cv.destroyAllWindows()
更多内容同步更新于个人博客系统:OpenCV中的视频读写