概述
目录
视频处理
读取并显示摄像头视频
VideoCapture 类
播放视频文件
保存视频文件
小结
视频处理
OpenCV 不仅能够处理图像,还能够处理视频。视频是由大量的图像构成的,这些图像以固定的时间间隔从视频中获取。这样,就能够使用图像处理的方法对这些图像进行处理,进而达到处理视频的目的。要处理视频,需要先对视频进行读取、显示和保存等相关操作。为此,OpenCV 提供了 VideoCapture 类和 VideoWriter 类的相关方法。
读取并显示摄像头视频
摄像头视频指的是从摄像头
为了读取并显示摄像头视频,OpenCV 提供了 VideoCapture 类的相关方法,这些方法包括摄像头的初始化方法、检验摄像头初始化是否成功的方法、从摄像头中读取帧的方法和关闭摄像头的方法等。下面依次对这些方法进行讲解。
说明
视频是由大量的图像构成的,把这些图像称作帧。
VideoCapture 类
VideoCapture 类提供了构造方法 VideoCapture(),用于完成摄像头的初始化工作。VideoCapture()的语法格式如下:
capture = cv2.VideoCapture(index)
注意
摄像头的数量及其设备索引的先后顺序由操作系统决定,因为 OpenCV 没有提供查询摄像头的数量及其设备索引的任何方法。
当 index 的值为 0 时,表示要打开的是第 1 个摄像头;对于 64 位的 Windows 10 笔记本,当 index 的值为 0 时,表示要打开的是笔记本内置摄像头
当 index 的值为 1 时,表示要打开的是第 2 个摄像头;对于 64 位的 Windows 10 笔记本,当 index 的值为 1 时,表示要打开的是一个连接笔记本的外置摄像头
为了检验摄像头初始化是否成功,VideoCapture 类提供了 isOpened()方法。isOpened()方法的语法格式如下:
retval = cv2.VideoCapture.isOpened()
retval:isOpened()方法的返回值。如果摄像头初始化成功,retval 的值为 True;否则,retval 的值为 False。
说明
在 VideoCapture()的语法格式基础上,isOpened()方法的语法格式可以简写为
retval = capture.isOpened()
摄像头初始化后,可以从摄像头中读取帧,为此 VideoCapture 类提供了 read()方法。read()方法的语法格式如下:
retval, image = cv2.VideoCapture.read() # 可以简写为 retval, image = capture.read()
retval:是否读取到帧。如果读取到帧,retval 的值为 True;否则,retval 的值为 False。
image:读取到的帧。因为帧指的是构成视频的图像,所以可以把「读取到的帧」理解为「读取到的图像」。
OpenCV 官网特别强调,在不需要摄像头时,要关闭摄像头。为此,VideoCapture 类提供了 release()方法。release()方法的语法格式如下:
cv2.VideoCapture.release() # 可以简写为 capture.release()
import cv2
capture=cv2.VideoCapture(0)
while(capture.isOpened()):
retal,image=capture.read()
cv2.imshow('video',image)
key=cv2.waitKey(1)
if key==65:
break
capture.release()
cv2.destroyAllWindows()
别看我,看我的手
将摄像头视频由彩色视频转换为灰度视频
import cv2
capture=cv2.VideoCapture(0)
while(capture.isOpened()):
retval,image=capture.read()
image_gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('video',image)
cv2.imshow('video',image_gray)
key=cv2.waitKey(1)
if key==32:
break
capture.release()
cv2.destroyAllWindows()
还是看菜狗吧
显示并保存摄像头视频某一时刻的图像
播放视频文件
VideoCapture 类及其方法除了能够读取并显示摄像头视频外,还能够读取并显示视频文件。当窗口根据视频文件的时长显示视频文件时,便实现了播放视频文件的效果。
读取并显示视频文件
VideoCapture 类的构造方法 VideoCapture()不仅能够完成摄像头的初始化工作,还能够完成视频文件的初始化工作。当 VideoCapture()用于初始化视频文件时,其语法格式如下:
注意
OpenCV 中的 VideoCapture 类虽然支持各种格式的视频文件,但是这个类在不同的操作系统中,支持的视频文件格式不同。尽管如此,VideoCapture 类能够在不同的操作系统中支持后缀名为.avi 的视频文件。
说明
调整 waitKey()方法中的参数值可以控制视频文件的播放速度。例如,当代码为 cv2.waitKey(1)时,等待用户按下键盘的时间为 1ms,视频文件的播放速度非常快;当代码为 cv2.waitKey(50)时,等待用户按下键盘的时间为 50ms,能够减缓视频文件的播放速度。
视频的暂停播放和继续播放
import cv2
video=cv2.VideoCapture('video/video.mp4')
while(video.isOpened()):
retral,image=video.read()
cv2.namedWindow('vide01',0)
if retral==True:
cv2.imshow('video1',image)
else:break
key=cv2.waitKey(50)
if key==32:
cv2.waitKey(0)
continue
if key==27:
break
video.release()
cv2.destroyAllWindows()
获取视频文件的属性
在实际开发中,有时需要获取视频文件的属性。为此,VideoCapture 类提供了 get()方法。get()方法的语法格式如下:
retval = cv2.VideoCapture.get(propId)
说明
(1)视频是由大量的、连续的图像构成的,把其中的每一幅图像称作一帧。
(2)帧数指的是视频文件中含有的图像总数,帧数越多,视频播放时越流畅。
(3)在播放视频的过程中,把每秒显示图像的数量称作帧速率(FPS,单位:帧/s)。
(4)帧宽度指的是图像在水平方向上含有的像素总数。
(5)帧高度指的是图像在垂直方向上含有的像素总数
保存视频文件
在实际开发过程中,很多时候希望保存一段视频。为此,OpenCV 提供了 VideoWriter 类。下面先来熟悉一下 VideoWriter 类中的常用方法。
VideoWriter 类
VideoWriter 类中的常用方法包括 VideoWriter 类的构造方法、write()方法和 release()方法。其中,VideoWriter 类的构造方法用于创建 VideoWriter 类对象,其语法格式如下:
<VideoWriter object> = cv2.VideoWriter(filename, fourcc, fps, frameSize)
在 OpenCV 中,使用 cv2.VideoWriter_fourcc()来确定视频编码格式
例如,在 Windows 操作系统下,fourcc 的值为 cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'),帧速率为 20,帧大小为 640×480。如果想把一段视频保存为当前项目路径下的 output.avi,那么就要创建一个 VideoWriter 类对象 output,关键代码如下:
fourcc = cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
output = cv2.VideoWriter("output.avi", fourcc, 20, (640, 480))
为了保存一段视频,除需要使用 VideoWriter 类的构造方法外,还需要使用 VideoWriter 类提供的 write()方法。write()方法的作用是在创建好的 VideoWriter 类对象中写入读取到的帧,其语法格式如下:
cv2.VideoWriter.write(frame)
注意
使用 write()方法时,需要由 VideoWriter 类对象进行调用。例如,在创建好的 VideoWriter 类对象 output 中写入读取到的帧 frame,关键代码如下:
output.write(frame)
当不需要使用 VideoWriter 类对象时,需要将其释放掉。为此,VideoWriter 类提供了 release()方法,其语法格式如下:
cv2.VideoWriter.release()
例如,完成保存一段视频后,需要释放 VideoWriter 类对象 output。关键代码如下:
output.release()
如何使用 VideoWriter 类
使用 VideoWriter 类保存一段视频需要经过以下几个步骤:创建 VideoWriter 类对象、写入读取到的帧、释放 VideoWriter 类对象等。而且,这段视频既可以是摄像头视频,也可以是视频文件。本节将使用 VideoWriter 类以实例的方式分别对保存摄像头视频和保存视频文件进行讲解。
说明
在 Windows 操作系统下,fourcc 的值为 cv2.VideoWriter_fourcc('X', 'V', 'I', 'D'),帧速率为 20,帧大小为 640×480。
小结
视频是由一系列连续的图像构成的,这一系列连续的图像被称作帧,帧是以固定的时间间隔从视频中获取的。因为视频播放的速度就是获取帧的速度,所以把视频播放的速度称作帧速率,其单位是帧/s(即 1s 内出现的图像数)。所谓视频处理,处理的对象就是从视频中获取的帧,而后使用图像处理的方法对获取的帧进行处理。OpenCV 提供了 VideoCapture 类和 VideoWriter 类处理视频,虽然这 2 个类在不同的操作系统中支持的视频文件的格式不同,但是这 2 个类在不同的操作系统中都支持 AVI 格式的视频文件。
最后
以上就是玩命草莓为你收集整理的opencv从入门到精通 哦吼10视频处理的全部内容,希望文章能够帮你解决opencv从入门到精通 哦吼10视频处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复