1.cv2.VideoCapture类函数介绍*
cv2.VideoCpature类的常用函数包括初始化、打开、帧捕获、释放和属性设置等。
1.1初始化
捕获对象 = cv2.VideoCapture(“摄像头ID号或视频文件”)
1.2cv2.VideoCapture.open()和 cv2.VideoCapture.isOpened()函数
一般情况下,使用cv2.VideoCapture()函数即可完成摄像头的初始化。有时,为了防止初始化发生错误,可以使用函数cv2.VideoCapture.isOpened()来检查初始化是否成功。该函数的语法格式为:
ret=cv2.VideoCapture.isOpened()
如果成功,则ret返回值为True
如果不成功,则返回值为False,而此时,就可以用cv2.VideoCapture.open(index/fliename)来打开摄像头,index为雷达的ID号。
1.3捕获帧
ret,imgage = cv2.VideoCpature.read()
image返回的是捕获到的帧,如果没有帧被捕获,则该值为空。
ret:捕获成功则为True,否则为False。
1.4释放
cv2.VideoCapture.release()
不使用时最好释放。
1.5属性设置
1.获取属性
ret = cv2.VideoCapture.get(propID)
示例:ret,cap = cv2.VideoCapture.read(0)
cap.get(cv2.CAP_PROP_FRAME_WIDTH)#获取当前帧对象的宽度
cap.get(cv2.CAP_PROP_FRAME_HEIGTH)#获取当前帧对象的高度
2.设置属性
ret = cv2.VideoCapture.set(propID,value)
示例:ret,cap = cv2.VideoCapture.read(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH,640)#将当前帧对象的宽度设置为640像素。
cap.set(cv2.CAP_PROP_FRAME_HEIGTH,480)#获将当前帧对象的高度设置为480像素
1.6cv2.VideoCapture.grab()函数和cv2.VideoCapture.retrieve()函数
对于单个摄像头的数据,最简单的办法是使用cv2.VideoCapture.read(),但是对于多个摄像头,该函数就无法胜任,这时候需要将read理解为grab()和retrieve()组成。
函数cv2.VideoCapture.grab()用来指向下一帧,其语法格式是:
retval=cv2.VideoCapture.grab()
如果该函数成功指向下一帧,则返回值retval为True。
函数cv2.VideoCapture.retrieve()用来解码,并返回函数v2.VideoCapture.grab()捕获的视频帧。该函数的语法格式为:
retval,image=cv2.VideoCapture.retrieve()
式中:
● image为返回的视频帧,如果未成功,则返回一个空图像。
● retval为布尔型值,若未成功,返回False;否则,返回True。
**
1.7.捕获摄像头视频
**
#使用cv2.VideoCapture类捕获摄像头视频
import cv2 as cv
import numpy as np
#使用电脑内置摄像头
cap = cv.VideoCapture(0)
while(cap.isOpened()):
ret,frame = cap.read()
cv.imshow(“video”,frame)
#等待25ms或esc键被按下
if cv.waitKey(25) & 0xFF ==27:
break
cap.release()
cv.destroyAllWindows()
1.8播放视频文件
import cv2 as cv
import numpy as np
#读取目录下的8.MP4文件
cap = cv.VideoCapture(“8.mp4”)
while(cap.isOpened()):
ret,frame = cap.read()
if ret == False:
break
cv.imshow(“video”,frame)
#等待25ms或esc键被按下
if cv.waitKey(25) & 0xFF ==27:
break
cap.release()
cv.destroyAllWindows()
**
2.VideoWriter类
**
cv2.VideoWriter类可以将图片序列保存成视频文件,也可以修改视频的各种属性,还可以完成对视频类型的转换。
2.1.类函数的介绍
2.1.1构造函数
。该函数的语法格式是:
=cv2.VideoWriter(filename,fourcc,fps,frameSize[,isColor])
*fourcc:表示视频编/解码类型(格式)。
cv2.VideoWriter_fourcc()有4个字符参数。这4个字符参数构成了编/解码器的“4字标记”,每个编/解码器都有一个这样的标记。下面列出几个常用的标记。
● cv2.VideoWriter_fourcc(‘I’,‘4’,‘2’,‘0’)表示未压缩的YUV颜色编码格式,色度子采样为4:2:0。该编码格式具有较好的兼容性,但产生的文件较大,文件扩展名为.avi。
● cv2.VideoWriter_fourcc(‘P’,‘I’,‘M’,‘I’)表示 MPEG-1编码类型,生成的文件的扩展名为.avi。
● cv2.VideoWriter_fourcc(‘X’,‘V’,‘I’,‘D’)表示MPEG-4编码类型。如果希望得到的视频大小为平均值,可以选用这个参数组合。该组合生成的文件的扩展名为.avi。
● cv2.VideoWriter_fourcc(‘T’,‘H’,‘E’,‘O’)表示Ogg Vorbis编码类型,文件的扩展名为.ogv。
● cv2.VideoWriter_fourcc(‘F’,‘L’,‘V’,‘I’)表示Flash视频,生成的文件的扩展名为.flv。
*fps为帧速率。
*framesize为每一帧的长和宽。
*iscolor表示是否为彩色图像
2.1.2write函数
cv2.VideoWriter类中的函数cv2.VideoWriter.write()用于写入下一帧视频。
2.1.3释放
在不需要 cv2.VideoWriter 类对象时,需要将其释放。释放该类对象时所使用的是函数cv2.VideoWriter.release()。
2.2保存视频
步骤:创建对象、写入视频、释放对象等步骤
2.2.1创建对象
设置好参数:1.文件名;2.使用cv2.VideoWriter_fourcc()确定编码/解码类型,比如fourcc = cv2.VideoWriter_forucc(*“XVID”)
3.确定视频的帧速率fps,如fps =20
4.确定视频的长度和宽度,如size=(640,480)
利用上述参数创建对象,如
out = cv2.VideoWriter(fliename,fourcc,fps,size)
2.2.2写入视频
使用函数cv2.VideoWriter.write()将读取到视频帧frame写入到对象out中:out.writr(frame)
2.2.3释放对象
在写入完成后,释放对象out
out.release()
例子:使用cv2.VideoWriter类保存摄像头视频文件
import cv2 as cv
import numpy as np
#定义好视频参数
filename = “save_video.flv”
fourcc = cv.VideoWriter_fourcc(‘X’,‘V’,‘I’,‘D’)
fps = 20
size = (500,500)
#定义对象
output = cv.VideoWriter(“save_video.avi”,fourcc,20,(500,500))
#获取摄像头数据
cap = cv.VideoCapture(0)
while(cap.isOpened()):
ret,frame = cap.read()
if ret == False:
break
cv.imshow(“video”,frame)
output.write(frame)
#等待25ms或esc键被按下
if cv.waitKey(25) & 0xFF ==27:
break
output.release()
cap.release()
cv.destroyAllWindows()
**
3.视频操作基础
**
视频是由视频帧构成的,将视频帧从视频中提取出,对其使用图像处理的方法进行处理,就可以达到处理视频的目的。