为啥OpenCV通过摄像头读取保存的视频,播放的时候特别快,无论我怎么改帧率也没用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥OpenCV通过摄像头读取保存的视频,播放的时候特别快,无论我怎么改帧率也没用相关的知识,希望对你有一定的参考价值。
Opencv是一帧一帧读取,处理完一帧就处理下一帧,中间是没有时间间隔的。首先要cvGetCaptureProperty(capture, CV_CAP_PROP_FPS ); //读取视频的帧率
读取到帧率,再
int vfps = 1000 / fps; //计算每帧播放的时间
这样,如果你sleep(vfps)秒,大概就可以按帧率播放,但还是有点偏差,如果你不是特别严格,就可以这样用,如果要求特别严格的话...就要另外想办法,思路就是这样的。 参考技术A OpenCV通过摄像头读取保存的视频,播放的时候特别快,重新设置参数。 参考技术B wait(30);
OpenCV学习笔记2基础:读取播放保存视频
文章目录
使用 OpenCV 也可以非常方便地读取、播放、保存视频,下面分别介绍。
1. 读取摄像头
VideoCapture
类用于从视频、图像序列、摄像头获取输入。先看如何读取摄像头输入:
import cv2
capture = cv2.VideoCapture(0) # 创建一个视频捕获对象,参数为摄像头编号
print('width = ', capture.get(3), ' height = ', capture.get(4)) # 查看摄像头参数
while True:
ret, frame = capture.read() # 读取一帧,ret表示是否读取成功
cv2.imshow('video 0', frame) # 显示一帧
if cv2.waitKey(1) == ord('q'): # 等待1毫秒,检测到Q键按下则退出
break
构造函数:cv.VideoCapture(index[, apiPreference])
第一个参数是摄像头的设备号,一般默认为 0 ,即第一个摄像头,如果有多个摄像头,可以设为 1、2、3 等等。
第二个参数指定用于读取视频的后端API,如 cv::CAP_FFMPEG
、cv::CAP_IMAGES
、cv::CAP_DSHOW
(参考 VideoCaptureAPIs)。
2. 读取视频
读取视频文件例子:
import cv2
capture = cv2.VideoCapture('test.mp4')
while capture.isOpened():
ret, frame = capture.read()
cv2.imshow('test video', frame)
if cv2.waitKey(1) == ord('q'):
break
构造函数:cv.VideoCapture(filename[, apiPreference])
第一个参数是文件名,可以是如下几类:
- 视频文件名 (如 video.avi)
- 图像序列模式串 (如 img_%02d.jpg, 会依次读取img_00.jpg, img_01.jpg, img_02.jpg, …)
- 视频流URL (如 protocol://host:port/script_name?script_params|auth)
- GStreamer pipeline string in gst-launch tool format in case if GStreamer is used as backend
前两种较简单,后两种可自己尝试。第二个参数用于指定读取视频的后端API。
3. 保存视频
VideoWriter
类用于保存视频。把摄像头输入保存为视频文件的例子:
import cv2
capture = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
output = cv2.VideoWriter('videos/output.avi', fourcc, 30, (640, 480))
while True:
ret, frame = capture.read()
if ret:
output.write(frame)
cv2.imshow('camera', frame)
if cv2.waitKey(1) == ord('q'):
break
else:
break
VideoWriter_fourcc
函数用于通过字符创建 fourcc 码,该编码用于指示一个视频的编码压缩格式等信息。什么是 fourcc 码可以参考:What is a FOURCC?
VideoWriter
是一个用于写视频的类。第一个参数是文件名, 第二个参数是 fourcc 码,第三个参数为帧率,第四个参数为视频大小。
References
- OpenCV: cv::VideoCapture Class Reference
- OpenCV: cv::VideoWriter Class Reference
- What is a FOURCC?
- Opencv中FOURCC详解_持久决心的博客-CSDN博客
- Video Codecs by FOURCC - fourcc.org
- Getting Started with Videos
QQ交流群:点击链接加入群聊【Python练习生】532232743
我的知乎:AXin啊
公众号:请叫我AXin
以上是关于为啥OpenCV通过摄像头读取保存的视频,播放的时候特别快,无论我怎么改帧率也没用的主要内容,如果未能解决你的问题,请参考以下文章