OpenCV视频稳定算法
opencv video stabilization algorithm
我正在使用opencv编写视频稳定器。算法如下:
虽然视频中有更多的帧:
- 从视频中获取新帧
- 检测新帧中的关键点
- 新关键点的计算描述符
- 匹配新帧和上一帧的描述符 筛选匹配项
- 以获得良好的匹配项
- 查找旧帧和新帧之间的单应性
- 将单应性(warpPerspective)应用于新框架,从而创建"调整后的新框架"
- 将上一帧设置为等于"调整后的新帧"(描述符、关键点)
我有几个问题。我走在正确的轨道上吗?如何进行实际稳定(使用高斯滤波器或其他东西)?
以下是可能的步骤顺序:
第 1 步。从影片文件中读取帧
第 2 步。从每一帧中收集突出点
第 3 步。选择点之间的对应关系
第 4 步。从噪声对应估计变换
第5步。变换近似和平滑
第 6 步。在完整视频上运行
有关每个步骤的更多详细信息,您可以在此处找到:
http://www.mathworks.com/help/vision/examples/video-stabilization-using-point-feature-matching.html
我认为您可以在OpenCV中遵循相同的步骤。
如果您使用的是python代码,那么您可以使用我强大的线程VidGear视频处理python库,该库现在以最小的延迟提供实时视频稳定功能,并且以Stabilizer Class几乎没有额外的计算能力要求为代价。为方便起见,下面是一个基本用法示例:
# import libraries
from vidgear.gears import VideoGear
from vidgear.gears import WriteGear
import cv2
stream = VideoGear(source=0, stabilize = True).start() # To open any valid video stream(for e.g device at 0 index)
# infinite loop
while True:
frame = stream.read()
# read stabilized frames
# check if frame is None
if frame is None:
#if True break the infinite loop
break
# do something with stabilized frame here
cv2.imshow("Stabilized Frame", frame)
# Show output window
key = cv2.waitKey(1) & 0xFF
# check for 'q' key-press
if key == ord("q"):
#if 'q' key-pressed break out
break
cv2.destroyAllWindows()
# close output window
stream.stop()
# safely close video stream
更高级的用法可以在这里找到:https://github.com/abhiTronix/vidgear/wiki/Real-time-Video-Stabilization#real-time-video-stabilization-with-vidgear
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 算法问题:查找从堆栈中弹出的所有序列
- 如何在c++中录制具有精确帧时间戳的视频
- 下面是排序算法O(n)吗
- KMP算法和LPS表构造的运行时间
- 为什么我的排序算法会更改数组值
- 求最大元素位置的分治算法
- 具有非整数边容量的最大流量的Dinic算法
- 到连接组件算法的问题(递归)
- 如何在QT中的自定义视频小工具t上绘制矩形
- 使用opencv在受控环境中进行视频跟踪的跟踪标记和跟踪算法选择
- OpenCV视频稳定算法
- 从 flv 视频(或任何其他视频)中提取音频的算法.怎么做
- 如何使用FAST算法稳定视频