Opencv 视频读取与写入的实现示例
作者:缺点灵气儿
本文将介绍如何使用OpenCV进行视频读写。通过阅读本文,您将了解如何读取视频文件、处理视频帧、写入视频文件等操作,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
前言
视频是由图片组成的, 视频的每一帧就是一幅图片, 一般是30帧, 表示一秒显示30张图片.
- cv2.VideoCapture可以捕获摄像头, 用数字来表示不同的设备, 比如0, 1
- 如果是视频文件, 可以直接指定路径即可.
通过路径获取视频内容
获取视频内容
vc = cv2.VideoCapture(path)
检查是否正确打开
vc.isOpened() # 可以读到内容返回True
循环播放
播放视频就是不停的换图像帧,即循环调用 vc.read() 和 cv2.imshow()
完整代码
import cv2 # 打开视频文件 def open_video(path): vc = cv2.VideoCapture(path) ret = vc.isOpened() # 可以读到内容返回True # 检查是否正确打开 if ret: print("视频打开成功") else: print("视频打开失败") return -1 print(f"开始播放视频: {path.split('/').pop()},按esc键退出") # 循环读帧播放视频 while ret: # 可以读到内容ret返回True ret, frame = vc.read() # 读到最后frame就是空 if frame is None: print("视频播放完毕") break if ret: cv2.imshow('{}'.format(path).split('/').pop(), frame) # 0xFF == 27表示按esc退出键会退出 if cv2.waitKey(33) & 0xFF == 27: break # 释放视频对象 vc.release() # 关闭窗口 cv2.destroyAllWindows() open_video("videos/1.mp4")
从摄像头读取视频数据
获取视频设备
cap = cv2.VideoCapture(0)
其他与直接读取视频一致
完整实例
import cv2 # 从摄像头一直读取数据 def camera(): # 获取视频设备 cap = cv2.VideoCapture(0) print("获取视频设备成功") ret = cap.isOpened() # 创建窗口 cv2.namedWindow('video', cv2.WINDOW_NORMAL) cv2.resizeWindow('video', 640, 480) print("成功创建窗口") print("开始播放来自摄像头的视频,按esc键退出) while ret: # 从摄像头读取视频 ret, frame = cap.read() # 将视频帧放在窗口中显示 cv2.imshow('video', frame) # 等待键盘事件, 按esc键会退出 if cv2.waitKey(33) & 0xFF == 27: break # 释放摄像头 cap.release() print("摄像头已关闭") # 关闭窗口 cv2.destroyAllWindows() camera()
录制视频
VideoWriter : 参数一为输出文件, 参数二为多媒体文件格式(VideoWriter_fourcc),参数三为帧率, 参数四为分辨率.
- write 编码并写入缓存
- release 缓存内容写入磁盘, 并释放资源
用于创建视频编解码器的四字符码(FourCC)
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
cv2.VideoWriter()
vm = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480))
'output.mp4' 是输出视频文件的名称,fourcc 是所选的视频编码器,20 是帧率,(640, 480) 是视频的分辨率。
将视频帧逐帧写入视频文件
vw.write(frame)
完整示例
import cv2 # 录制视频 def record_video(): # 获取视频设备 cap = cv2.VideoCapture(1) print("获取视频设备成功") # *mp4v就是解包操作 等同于 'm', 'p', '4', 'v' fourcc = cv2.VideoWriter_fourcc(*'mp4v') # 用于创建视频编解码器的四字符码(FourCC)。 # (640, 480)表示摄像头拍视频, 这个大小搞错了也不行,主要是这个分辨率. vw = cv2.VideoWriter('output.mp4', fourcc, 20, (640, 480)) # 'output.mp4' 是输出视频文件的名称,fourcc 是所选的视频编码器,20 是帧率,(640, 480) 是视频的分辨率。 print("开始录制来自摄像头的视频,按esc键退出") # 循环存帧录制视频 while cap.isOpened(): ret, frame = cap.read() if not ret: print('没有接收到图像') break vw.write(frame) # 将视频帧逐帧写入视频文件。 cv2.imshow('frame', frame) # 显示录制的帧 if cv2.waitKey(33) & 0xFF == 27: break # 释放摄像头 cap.release() print("摄像头已关闭") record_video()
到此这篇关于Opencv 视频读取与写入的实现示例的文章就介绍到这了,更多相关Opencv 视频读写内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!