以下是 Python + OpenCV 实现视频抽帧的完整攻略。
1. 安装 OpenCV
在 Python 环境中安装 OpenCV,可以使用 pip 安装。打开终端或命令行窗口,输入以下命令:
pip install opencv-python
2. 导入必要的模块
在Python代码中导入必要的模块,包括cv2
(OpenCV模块),os
(文件操作模块),numpy
(数学计算模块):
import cv2
import os
import numpy as np
3. 加载视频并抽帧
使用cv2.VideoCapture
函数读取视频,获取视频的基本信息,包括帧率、总帧数、画面宽高度等。然后根据帧率计算出每隔多少帧取一张图片,并使用cv2.imwrite
函数保存为图片文件。
# OpenCV读取视频文件
vidcap = cv2.VideoCapture('video.mp4')
# 读取视频的基本信息
fps = vidcap.get(cv2.CAP_PROP_FPS)
total_frames = int(vidcap.get(cv2.CAP_PROP_FRAME_COUNT))
video_width = int(vidcap.get(cv2.CAP_PROP_FRAME_WIDTH))
video_height = int(vidcap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(fps, total_frames, video_width, video_height)
# 定义保存图片的路径和名字
save_path = 'frames/video'
if not os.path.exists(save_path):
os.makedirs(save_path)
# 每隔interval帧取一张图片
interval = 25
success, image = vidcap.read()
count = 0
while success:
if count % interval == 0:
# 保存抽帧的图片
save_name = os.path.join(save_path, f"{count:06d}.jpg")
cv2.imwrite(save_name, image)
count += 1
success, image = vidcap.read()
4. 示例说明
示例一:将整个视频抽帧保存为图片
在这个示例中,我们将整个视频抽帧保存为图片。这个示例的interval
设置为1,即每隔1帧抽取一张图片。
# OpenCV读取视频文件
vidcap = cv2.VideoCapture('video.mp4')
# 读取视频的基本信息
fps = vidcap.get(cv2.CAP_PROP_FPS)
total_frames = int(vidcap.get(cv2.CAP_PROP_FRAME_COUNT))
video_width = int(vidcap.get(cv2.CAP_PROP_FRAME_WIDTH))
video_height = int(vidcap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(fps, total_frames, video_width, video_height)
# 定义保存图片的路径和名字
save_path = 'frames/video'
if not os.path.exists(save_path):
os.makedirs(save_path)
# 每隔interval帧取一张图片
interval = 1
success, image = vidcap.read()
count = 0
while success:
if count % interval == 0:
# 保存抽帧的图片
save_name = os.path.join(save_path, f"{count:06d}.jpg")
cv2.imwrite(save_name, image)
count += 1
success, image = vidcap.read()
示例二:只抽取视频的前500帧
在这个示例中,我们只抽取视频的前500帧并保存为图片。这个示例的interval
设置为10,即每隔10帧抽取一张图片。
# OpenCV读取视频文件
vidcap = cv2.VideoCapture('video.mp4')
# 读取视频的基本信息
fps = vidcap.get(cv2.CAP_PROP_FPS)
total_frames = int(vidcap.get(cv2.CAP_PROP_FRAME_COUNT))
video_width = int(vidcap.get(cv2.CAP_PROP_FRAME_WIDTH))
video_height = int(vidcap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(fps, total_frames, video_width, video_height)
# 定义保存图片的路径和名字
save_path = 'frames/video'
if not os.path.exists(save_path):
os.makedirs(save_path)
# 每隔interval帧取一张图片
interval = 10
success, image = vidcap.read()
count = 0
while success:
if count < 500:
if count % interval == 0:
# 保存抽帧的图片
save_name = os.path.join(save_path, f"{count:06d}.jpg")
cv2.imwrite(save_name, image)
else:
break
count += 1
success, image = vidcap.read()
以上就是使用 Python 和 OpenCV 实现视频抽帧的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python+opencv实现视频抽帧示例代码 - Python技术站