编程语言:Python
所需库:cv2
使用 cv2.VideoCapture 类
Args:
vc = cv2.VideoCapture(filename)
使用 VideoCapture 对象的 isOpened 方法
# determine whether to open normally
if vc.isOpened():
ret, frame = vc.read()
else:
ret = False
若成功,返回 True。
使用 VideoCapture 对象的 read 方法
使用 VideoCapture 对象的 read 方法按帧读取视频,ret, frame 是 read 方法的两个返回值 ,其中 ret 是布尔值,如果能正确读取帧,则返回 True;如果文件读取到结尾,它的返回值就为 False。frame 就是每一帧的图像,是一个三维矩阵。
# loop read video frame
while ret:
ret, frame = vc.read()
使用 cv2.imwrite() 函数
第一个参数是文件名,第二个参数是图片资源。
cv2.imwrite(image_path, image)
使用 cv2.waitKey() 函数
cv2.waitKey(1)
参数 1 表示延时 1ms 切换到下一帧图像,对于视频而言;
参数 0 表示只显示当前帧图像,相当于视频暂停;
参数过大会因为延时过久而卡顿感觉到卡顿。
使用 VideoCapture 对象的 release 方法vc.release()
"""
-------------------------------------
# -*- coding: utf-8 -*-
# @Time : 2020/10/1 15:44:12
# @Author : Giyn
# @Email : [email protected]
# @File : video_processing.py
# @Software: PyCharm
-------------------------------------
"""
import cv2
import logging
# log information settings
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(levelname)s: %(message)s')
def save_image(num, image):
"""Save the images.
Args:
num: serial number
image: image resource
Returns:
None
"""
image_path = '../raw_pictures/{}.jpg'.format(str(num))
cv2.imwrite(image_path, image)
file_path = '../videos/video_1.mp4'
vc = cv2.VideoCapture(file_path) # import video files
# determine whether to open normally
if vc.isOpened():
ret, frame = vc.read()
else:
ret = False
count = 0 # count the number of pictures
frame_interval = 30 # video frame count interval frequency
frame_interval_count = 0
# loop read video frame
while ret:
ret, frame = vc.read()
# store operation every time f frame
if frame_interval_count % frame_interval == 0:
save_image(count, frame)
logging.info("num:" + str(count) + ", frame: " +
str(frame_interval_count))
count += 1
frame_interval_count += 1
cv2.waitKey(1)
vc.release()