Opencv(Python)视频按帧切片/cv2.VideoCapture()用法
作者:小教学发布时间:2023-09-18分类:程序开发学习浏览:215
一、介绍
Cv2.视频捕获是OpenCV中一个用于捕捉视频的类。它可以访问计算机的摄像头,或从视频文件中读取图像.通过cv2.视频捕获,用户可以轻松地捕捉、保存、编辑和传输视频流数据。
使用cv2.视频捕获可以实现以下功能:
1.打开计算机的摄像头,实时捕捉摄像头的视频流数据.
2.读取视频文件,逐帧解码并输出视频流数据.
3.控制帧率,调整视频的播放速度.
4.控制视频的长宽和分辨率.
5.编辑视频流数据,比如添加水印、合并视频等操作.
6.传输视频数据,可以通过网络传输视频流数据.
Cv2.视频捕获中最常用的方法有:
1.Read():读取视频流数据中的一帧。
2.isOpen():检查当前的cv2.视频捕获是否已经打开。
3.Release():释放cv2.视频捕获对象占用的资源。
例如以下代码展示如何使用cv2.视频捕获对象打开计算机的摄像头并捕获实时视频:
import cv2
cap = cv2.VideoCapture(0) # 打开计算机的摄像头
while True:
ret, frame = cap.read() # 读取视频流数据中的一帧
cv2.imshow('frame', frame) # 显示捕获的视频流数据
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release() # 释放占用的资源
cv2.destroyAllWindows()
二、cv2.视频捕获()视频的获取操作
1个、从文件读取视频
参数是视频文件路径,打开方式如下:
videoCapture = cv2.VideoCapture(“../test1.mp4”) #.avi等视频文件
2个、从摄像头读取视频
视频捕获(0)中参数是0,表示打开笔记本的内置摄像头,如果有多个摄像头,往上加就可。
videoCapture = cv2.VideoCapture(0)
如果要读取监控摄像头的视频流,需要知道指定摄像头的ip等信息。
# 使用rtsp流打开相机
videoCapture = cv2.VideoCapture(f'rtsp://{username}:{password}@{ip}:{port}/h264/ch1/main/av_stream')
三、视频捕获.Read()按帧读内容
# 读帧
success, frame = videoCapture.read()
print(success)
print(frame)
success,frame是获.read()方法的两个返回值。 其中success是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。frame就是每一帧的图像,是个三维矩阵。
下面这个示例中,我们使用了默认摄像头(设备编号为0)作为输入,然后使用While循环逐帧读取视频并在窗口中显示。如果按下‘Q’键或无法读取视频,则退出循环并释放资源.
import cv2
# 创建 VideoCapture 对象
cap = cv2.VideoCapture(0)
# 循环读取视频流
while True:
# 逐帧读取视频
ret, frame = cap.read()
# 如果不能读取视频,退出循环
if not ret:
break
# 在窗口中显示视频帧
cv2.imshow("frame", frame)
# 检测键盘输入,按 'q' 键退出循环
key = cv2.waitKey(1)
if key == ord('q'):
break
# 释放资源并关闭窗口
cap.release()
cv2.destroyAllWindows()
什么是帧,帧的快慢是什么,影响什么
视频的基本组成部分是帧(Frame),即一系列静态图像,这些图像在一定速率下以连续的方式播放,形成动态图像,例如30帧/秒。视频每秒的帧数被称为帧率(帧速率),通常用“fps”(每秒帧)表示。例如,30fps表示视频每秒钟包含30帧图像。帧率决定了视频的流畅度和真实感.较高的帧率可以使视频看起来更加流畅,因为它们可以更快地刷新图像.例如,60fps的视频比30fps的视频看起来更加流畅。此外,较高的帧率还可以减少视频中的模糊和颤动,因为它们可以更好地捕捉运动.但较高的帧率会导致文件变大和编解码更复杂,因为需要处理更多的帧图像.
Https://blog.csdn.net/cvxiayixiao/article/details/130519349
四、实例
import os
import cv2
# 定义保存图片函数
# image:要保存的图片
# pic_address:图片保存地址
# num: 图片后缀名,用于区分图片,int 类型
def save_image(image, address, num):
pic_address = address + str(num) + '.jpg'
cv2.imwrite(pic_address, image)
def video_to_pic(video_path, save_path, frame_rate):
# 读取视频文件
# video_path为视频路径,save_path为保存图片路径,frame_rate可以设置多少帧切一张图
global videoCap
#这里将videoCapture加global意思是设置成了全局变量,后面释放摄像头要用到这个变量
videoCap = cv2.VideoCapture(video_path)
if videoCap.isOpened():
print("摄像头or视频打开成功")
if not videoCap.isOpened():
print("找不到摄像头or视频")
exit()
# 读帧
success, frame = videoCap.read()
"""success,frame是获.read()方法的两个返回值。
其中success是布尔值,如果读取帧是正确的则返回True,如果文件读取到结尾,它的返回值就为False。
frame就是每一帧的图像,是个三维矩阵。"""
# print(success)
# print(frame)
if videoCap.open(video_path):
print("视频提取成功")
if not videoCap.open(video_path):
print("can not open the video")
j = 0
i = 0
while success:
i = i + 1
# 每隔固定帧保存一张图片
if i % frame_rate == 0:
j = j + 1
save_image(frame, save_path, j)
print('图片保存地址:', save_path + str(j) + '.jpg')
success, frame = videoCap.read()
# if cv2.waitKey(1) & 0xFF == ord('q'):
# break
if __name__ == '__main__':
# 视频文件和图片保存地址
SAMPLE_VIDEO = 'F:/Capture/dist/video/sc0914.mp4'
SAVE_PATH = 'F:/Capture/dist/VideotoImages/sc0914/'
#注意保存本地路径不能有中文,save_image()以及imwrite、cv2.imread()均不支持有中文的路径
if not os.path.exists(SAVE_PATH):
os.makedirs(SAVE_PATH)
# 设置固定帧率
FRAME_RATE = 10
video_to_pic(SAMPLE_VIDEO, SAVE_PATH, FRAME_RATE)
# 调用release()释放摄像头
# 调用destroyAllWindows()关闭所有图像窗口。
videoCap.release()
cv2.destroyAllWindows()
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 6鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 7[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 8Android广播如何解决Sending non-protected broadcast问题
- 9鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版