目錄
主要記錄Python-OpenCV中的VideoCapture
類的使用;官方文檔;
VideoCapture()
是用於從視頻文件、圖片序列、攝像頭捕獲視頻的類;
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# @Time : 19-4-21 上午10:31
# @Author : chen
"""
VideoCapture()的使用
"""
import cv2
import argparse
import os
import pdb
ap = argparse.ArgumentParser()
ap.add_argument("-v", "--videoPath", default="./video_1.mp4", help="path to input video")
ap.add_argument("-o", "--outputPath", default="grabImages", help="path to output frames")
args = vars(ap.parse_args())
# 初始化,並讀取第一幀
# rval表示是否成功獲取幀
# frame是捕獲到的圖像
vc = cv2.VideoCapture(args["videoPath"])
rval, frame = vc.read()
# 獲取視頻fps
fps = vc.get(cv2.CAP_PROP_FPS)
# 獲取視頻總幀數
frame_all = vc.get(cv2.CAP_PROP_FRAME_COUNT)
print("[INFO] 視頻FPS: {}".format(fps))
print("[INFO] 視頻總幀數: {}".format(frame_all))
print("[INFO] 視頻時長: {}s".format(frame_all/fps))
outputPath = os.path.sep.join([args["outputPath"]])
if os.path.exists(outputPath) is False:
print("[INFO] 創建文件夾,用於保存提取的幀")
os.mkdir(outputPath)
# 每隔100幀保存一張圖片
frame_interval = 100
# 統計當前幀
frame_count = 1
# 保存圖片個數
count = 0
while rval:
rval, frame = vc.read()
if frame_count % frame_interval == 0:
filename = os.path.sep.join([outputPath, "test_{}.jpg".format(count)])
cv2.imwrite(filename, frame)
count += 1
print("保存圖片:{}".format(filename))
frame_count += 1
# 關閉視頻文件
vc.release()
print("[INFO] 總共保存:{}張圖片".format(count))