0
点赞
收藏
分享

微信扫一扫

【OpenCV教程】04 视频的读取和显示


导读

OpenCV功能越发强大,不学一下怎么行?


今天要分享这篇文章带我们一起了解视频的读取操作(包括从摄像头读取和从视频中读取),视频的保存操作 。让我们走进这篇文章,一起来了解一下吧!


如果你有什么问题,或者有什么想法,欢迎评论与我一起沟通交流。如果你想了解更多有关于计算机视觉、OpenCV、机器学习、深度学习等相关技术的内容,想与更多大佬一起沟通,那就加群:326866692 或者扫描下方二维码加入我们吧!


1 视频读取

1 理论讲解

在前面,我们讲到图像的一些简单操作,包括图像的读取、显示、存储,讲到窗口的创建和删除。很多时候,我们想操作的不仅仅是图像,还有视频。


读取视频可能是从摄像头中读取,也可能是从视频中读取

2 API介绍

视频读取的API是VideoCapture,该API实现的功能是:


通过摄像头或者文件读取视频。


API定义如下:


def VideoCapture(filename, apiPreference=None):


API的参数含义如下:


(1)filename:视频的文件名或者摄像头的索引,0表示系统默认摄像头;
(2)apiPreference:视频加载参数。一般使用默认加载。


第二个参数可取值有很多,在这里不展开说明,我们一般使用如下,也就是默认的加载方式:


CAP_ANY = 0


在读取视频时,我们要检测是否成功打开视频文件或成功开启摄像头,检测视频文件或者摄像头是否打开的API是isOpened,该API实现的功能是:


如果摄像头或视频文件打开成功,返回True,如果打开失败,返回False。


调用方式如下:


cap.isOpened()


3 代码示例

讲完理论和API,我们举几个例子。

首先是打开摄像头获取视频:


cap = cv.VideoCapture(0)  # 数字表示摄像头索引,0表示从系统默认摄像头开始。


if not cap.isOpened():
print("无法打开摄像头")
exit()


然后是打开文件获取视频:


cap = cv.VideoCapture(fileName)
if not cap.isOpened():
print("无法打开视频文件")
exit()


2 视频显示与释放

1 理论讲解

视频显示是按帧显示所以我们需要用循环不断获取帧,直到所有帧获取结束或者用户退出。


我们用之前提到的waitKey来控制帧,一般来说,我们设为25帧,太大就会有卡顿现象出现

2 API介绍

读取视频帧的API是read,该API实现的功能是:


读取视频流的每一帧,并转化为图片输出。


该API的调用方式如下:


ret, frame = cap.read()


该API有两个返回值,一个返回值用来表示是否正确读取帧,一个返回值用来保存检测到的每一帧图片:


(1)ret用来表示是否正确读取帧,取值为 True 或 False ;
(2)frame用来保存正确读取帧后的每一帧图片。


在视频显示中,还用到一个功能,是视频显示过程中按下某个字符时,退出视频:


if cv.waitKey(1) == ord('q'):  # 按下q退出
break


当退出视频时,我们要将定义的视频变量释放掉,我们用到下面的语句:


cap.release()


3 代码示例

我们读取视频后,需要按帧显示视频,当显示完毕,或者检测的退出字符,就退出视频:


while True:
# 逐帧捕获
ret, frame = cap.read() # 如果正确读取帧,ret为True
if not ret:
print("无法正确读取帧")
break
# 按帧显示
cv.imshow('frame', frame)
if cv.waitKey(25) == ord('q'):
break


# 完成所有操作后,释放捕获
cap.release()
cv.destroyAllWindows()


读取摄像头的执行结果如下:


【OpenCV教程】04 视频的读取和显示_计算机视觉


说在后面的话

这篇文章到这里就要结束啦,希望大家能够通过这篇文章,能够了解视频的基本操作,方便后续过程中,继续深入操作视频。


其实我们能够发现,视频就是连续的图片,所以,操作视频,就是操作每一帧的图片。这样,我想大家就能够通过学习图像处理,掌握视频处理的基本方式啦!


让我们在后续的课程中,再接再厉,学习更多知识吧。



【OpenCV教程】04 视频的读取和显示_ide_02


举报

相关推荐

0 条评论