视频操作

视频操作


视频读写


OpenCV中我们要获取一个视频,需要创建一个VideoCapture对象,指定你要读取的视频文件。(这里指定摄像头也可以)

API:

cv.VideoCapture(filepath)

filepath:视频文件路径

获取视频的某些属性。

实例.get(propId)

propld:从0到18的数字,每个数字表示视频的属性。

修改视频的属性信息:cap.set(propId,value)

proidId:属性的索引。

value:修改后的属性值。

判断图像是否读取成功:实例.isOpened()

获取视频的一帧图像:ret,frame=实例.read()

ret:若获取成功返货True,失败返回false

frame:获取到的某一帧的图像。

调用cv.imshow()显示图像,在显示图像时使用cv.waitkey()设置适当的持续时间,如果太低视频会播放的非常快,如果太高就会播放的非常慢。通常情况下设置25ms就可以了。

最后利用cap.realease()将视频释放掉。

视频保存


  1. 创建时评写入的对象:out=cv.VideoWriter(filename,fourcc,fps,frameSize)

参数:

filename:视频保存的位置

fourcc:指定视频编解码器的4字节代码

fps:帧率

frameSize:帧大小。

设置视频的编解码器,如下所示:retval=cv.VideoWriter_fourcc(c1,c2,c3,c4)

c1-c4:是视频编解码器的4字节代码,在fourcc.org中找到可用代码列表,与平台紧密相关。

利用cap.read()获取视频中的每一帧图像,并使用out.write()将某一帧图像写入视频中。

利用cap.release()和out.release()释放资源。

视频追踪


meanshift

原理很简单,就是假设有一堆点集,有一个窗口,需要移动这个窗口到点集密度最大的区域当中。

API:

cv.meanShift(probImage,window,criteria)

provImage:ROI区域,即目标的直方图的反向投影。

window:初始搜索窗口,就是定义ROI的rect。

criteria:确定窗口搜索停止的准则,主要有迭代次数达到设置的最大值 ,窗口中心的漂移值大于某个设定的限值等。

实现meanshift的主要流程:1。读取视频文件;2。感兴趣区域设置;3。计算直方图;4。目标追踪。

Camshift

该算法用于解决meanshift算法中窗口固定大小的问题。可随着跟踪目标的大小变化实时调整搜索窗口的大小。

camshift算法首先应用meanshift,一点meanshift收敛,它就会更新窗口的大小,计算最佳拟合椭圆的方向,从而根据目标的位置和大小更新搜索窗口。

 

posted @ 2021-12-08 20:37  用余生去爱  阅读(170)  评论(0)    收藏  举报