赞
踩
目录
从设备,可以是摄像头可以是本地视频,获取视频的函数 cv.VideoCapture()。本函数作用在于创建一个VideoCapture或者VideoWriter对象,真正的读取和写入是通过创建的对象进行read和write的调用的。视频可以采用不同的格式,如AVI,MP4,MOV等,这些格式定义了视频文件的编码方式、分辨率、帧率等参数。
视频的基本组成部分是帧(frame),即一系列静态图像,这些图像在一定速率下以连续的方式播放,形成动态图像,例如30帧/秒。视频每秒的帧数被称为帧率(Frame Rate),通常用“fps”(Frames Per Second)表示。例如,30fps表示视频每秒钟包含30帧图像。帧率决定了视频的流畅度和真实感。较高的帧率可以使视频看起来更加流畅,因为它们可以更快地刷新图像。例如,60fps的视频比30fps的视频看起来更加流畅。此外,较高的帧率还可以减少视频中的模糊和颤动,因为它们可以更好地捕捉运动。但较高的帧率会导致文件变大和编解码更复杂,因为需要处理更多的帧图像。30帧即代表一秒展现30张图片
代码:
- import cv2 as cv
-
- # 创建VideoCapture对象,用创建的对象去做之后的操作
- cap = cv.VideoCapture(0)
- # 检测有无摄像头正常使用
- # 这是一个必要的验证,当cap为空的时候,后续调用会报错。
- if not cap.isOpened():
- print("Cannot open camera")
- exit()
-
- # 获取视频流是一个连续的循环过程,一直在获取,不是说获取到一帧就可以了
- while True:
- # 通过创建的VideoCapture对象逐帧获取视频,会返回两个参数,ret返回true和false代表是否正常获取到帧,以及视频是否结束
- # frame代表获取到的帧
- ret, frame = cap.read()
- # if frame is read correctly ret is True
- if not ret:
- print("不能正常读取视频帧")
- break
- # 将获取到的视频帧,也就是一幅幅图像,转为灰度图
- gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
- # 展示
- cv.imshow('frame', gray)
- # q退出获取视频流
- if cv.waitKey(1) == ord('q'):
- break
- # 释放资源
- cap.release()
- cv.destroyAllWindows()
-
代码如下:
- import cv2
-
-
- # 视频的本质上就是由一幅一幅的图片组成
- # 24帧 60帧(表示一秒显示60张图片)
-
-
- # 创建一个窗口
- cv2.namedWindow('video',cv2.WINDOW_NORMAL)
- cv2.resizeWindow('video',640,480)
-
- # 打开摄像头
- cap = cv2.VideoCapture(0)
- # 打开视频
- # cap = cv2.VideoCapture('1.mp4')
- # 保存视频
- fourcc = cv2.VideoWriter_fourcc(*'mp4v')
- vw = cv2.VideoWriter('123.mp4',fourcc,30,(640,480))
-
-
-
- # 循环读取摄像头的每一帧
- while True:
- # 读一帧数据,返回标记,True表示读到了数据,False表示没读到数据
- ret,frame = cap.read()
-
- #可以根据ret做个判断
- if not ret:
- #没读到数据,直接退出
- break
- vw.write(frame)
- # 显示数据
- cv2.imshow('video',frame)
-
- key = cv2.waitKey(1000 // 30)
- if key & 0xFF == ord('q'):
- break
-
- # 释放资源
- cap.release()
- vw.release()
- cv2.destroyAllWindows()
-
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。