OpenCV使用技巧
OpenCV创建和读取视频,并将视频保存成图像
本篇帖子教会你如何使用OpenCV python版快速实现从电脑内置摄像头或者外接摄像头读取视频流,并且在指定的文件路径以设置的时间间隔将视频帧保存下来。
准备知识
在使用OpenCV python版之前,你需要首先检查电脑中安装的Python环境中已经安装了OpenCV库。
打开终端界面(Windows系统中打开命令提示符界面,Linux系统中打开终端),输入命令:pip list,然后按回车。
pip list
Python库列表中的库名称一般按英文字母表排序。如下图所示,如果已经安装了OpenCV库,在字母o开头部分可以找到“opencv-python”,代表OpenCV库已经安装成功,图中安装版本为4.9.0.80。
如果没有安装,请在终端中键入命令:pip install opencv-python,然后回车。
pip install opencv-python
Python代码
"""
This Python program enables the user to save the video stream from the camara
as serial images at a certain time interval to a specified folder.
@Date: Created on Fri Jan 03 2024
@Version: 1.0, updated on Jan 05 2024
@Author: Dr-Ing. Kang
@E-mail: yuran.kang@outlook.com
"""
import cv2 # 导入opencv库,简称cv2
import time, os # 导入Python自带的时间time库,和操作系统os库;调用系统时间和文件操作需要用到这两个库
cam = cv2.VideoCapture(0) # 如果电脑自带摄像头,则将外接摄像头编号改为1.
# 创建计数器和计时器变量
count = 0
initial_time = time.time() # 获取初始时间
interval = 5 # 设置保存图片的时间间隔(单位:s)
# 此段落检查摄像头能否成功打开
if cam.isOpened() == False:
print("摄像头打开失败!")
else:
print("摄像头打开成功!")
# 此段落意在指定路径上创建一个文件夹
try:
# 创建名为SampleImage的文件夹
if not os.path.exists('C:/Users/MichaelKYR/Desktop/SampleImage'): # 文件夹路径修改为你自己的
os.makedirs('C:/Users/MichaelKYR/Desktop/SampleImage') # 文件夹路径修改为你自己的
# 如果未创建,则引发错误:
except OSError:
print('Error: 创建文件夹错误')
def save_image(image, addr, time):
filename = f'image_{int(time)}.jpg' # 生成下一个保存图片的文件名
address = addr + 'image_' + str(time) + '.jpg'
cv2.imwrite(address, image) # 按更新时间编号的文件名保存图片
print('已保存图像: ', filename)
while True:
ret, frame = cam.read()
if not ret: # ret为一个布尔值,代表获取视频帧成功或者失败;ret默认值为true
print('获取视频帧失败,程序停止')
break
else:
cv2.imshow("Video Stream", frame)
# 判断是否达到保存下一张图像的时间点
current_time = int(round(time.time() - initial_time))
if current_time >= interval * count:
# 保存路径修改为自己的
save_image(frame, 'C:/Users/MichaelKYR/Desktop/SampleImage/', current_time)
count += 1 # 计算器加1,以进入下一个时间间隔
# 按q键退出程序
inputKey = cv2.waitKey(1)
if inputKey & 0xFF == ord('q'):
break
# 释放摄像头和窗口资源
cam.release()
cv2.destroyAllWindows()
运行效果
在VS Code中点击运行,终端显示“摄像头打开成功!”。
接着会跳出摄像头的实时画面窗口,可以注意到,窗口名称显示为程序自定义的“Video Stream”;你也可以将视频窗口改为中文名。
(p.s. 此处,请务必记得一个额外操作:检查画面是否是实时的(挥动手指或者移动摄像头);如果画面不动,说明程序代码中有bug,请仔细检查并重新修改程序代码。)
每隔5秒钟(代码中设置的时间间隔),程序会将视频帧保存在桌面文件夹“SampleImage”中。在程序保存好第40秒的视频帧后,将鼠标光标移动至实时画面窗口之中,再按q键退出程序(请输入法改为英文的)。