OpenCV视频防抖技术解析
视频防抖有很多种技术,各有优劣,主流的目前分为三种:
EIS电子防抖
EIS电子防抖是通过软件算法实现防抖的。其技术运作原理是通过加速度传感器和陀螺仪模块侦测手机抖动的幅度,从而来动态调节整ISO、快门以及成像算法来做模糊修正。
优点:成本低
缺点:画面会被裁切,牺牲图像分辨率
OIS光学防抖
OIS光学防抖是通过处理器、陀螺仪和相机防抖模组之间的配合,在拍照抖动时用以驱动防抖组件快速向抖动的相反方向移动镜头模组,由此来抵消发生的抖动,进而实现最终的稳定成像。
优点:画面不会被裁切,原生画质图像效果最好
缺点:成本较高、镜头非常容易损坏、镜头无法做小
AIS智能防抖
AIS防抖是一种基于人工智能的图像防抖技术,可以在相机拍摄过程中,减少因为手抖动造成的画面模糊,获得更加稳定,清晰的画面。即使在拍摄视频或者拍摄夜景时,也可取得良好的防抖效果。
优点:健壮性可以做到很强
缺点:性能低、尚未普及
本文主要讨论的是最AIS智能防抖的基础部分,不涉及到AI的部分,而只是最原始的基于图像特征点抖动检测加以纠偏的防抖技术。
第一步:对每一帧(逐帧)图像做角点检测,又称为关键点检测。也就是将图像上所有的关键点角点识别出来。
如下图所示,蓝色圈出来的部分,就是图像上的关键点。

关键点检测有很多种算法:
1. FAST
2. Agast
3. GFTT
4. SimpleBlob
5. Affine
6. SIFT
7. BRISK
8. ORB
9. MSER
第二步:逐一将前后两帧的角点(关键点)做比对,计算出两两之间的向量差(仿射变换)。
如下图红色箭头所示方向,既是两帧相比对得到的向量方向。
先使用OpenCV里的光流法函数 calcOpticalFlowPyrLK() 函数得到前后得到当前帧相对上一帧的所有关键点变化信息。
再使用OpenCV里的 estimateRigidTransform() 函数传入上一个函数的两帧的结果,可以挑选出前后两帧两个2D点集矩阵之间的最佳仿射变换。

第三步,将第二步算出的最佳仿射变换矩阵数据的整体平均方向,套用低通滤波或者高斯滤波,抹平突变的波峰波谷。
在OpenCV里面还分成 单程稳定器(OnePassStabilizer)和双程稳定器(TwoPassStabilizer),
且支持设置两种滤波方式:低通滤波(LpMotionStabilizer)和高斯滤波(GaussianMotionFilter)。
第四步,使用均值滤波抹平之后的仿射变换矩阵数据对视频帧进行图像变换(缩放、旋转、平移等全放射变换)和裁切。
在OpenCV里面使用invertAffineTransform() 和 warpAffine()直接对图像进行仿射变换,得到变换后的图像结果。
第五步,将裁切后的视频resize回原视频的大小。
此步骤涉及到多种BorderMode(边界模式):
1. CONSTANT
2. REPLICATE
3. REFLECT
4. WRAP
5. REFLECT_101
6. TRANSPARENT
至于各自有什么差异无非就是各种填充方式有差异,有些是镜面反射,有些是透明,有些是纯黑色,自行去看OpenCV的文档,一般最常见的是REPLICATE Mode。

以上就是一个视频软件防抖的全部步骤,希望能对你有帮助?
OpenCV视频防抖技术解析的更多相关文章
- OpenCV读写视频文件解析(二)
OpenCV读写视频文件解析(二) VideoCapture::set 设置视频捕获中的属性. C++:bool VideoCapture::set(int propId, double value) ...
- OpenCV读写视频文件解析
OpenCV读写视频文件解析 一.视频读写类 视频处理的是运动图像,而不是静止图像.视频资源可以是一个专用摄像机.网络摄像头.视频文件或图像文件序列. 在 OpenCV 中,VideoCapture ...
- 转:YUV RGB 常见视频格式解析
转: http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html YUV RGB 常见视频格式解析 I420是YUV格式的一种,而Y ...
- 腾讯、爱奇艺、优酷等vip视频在线解析
http://vip.mist.xin 菠萝蜜TV全网VIP视频在线看 菠萝蜜tv http://jx.mist.xin 全网VIP视频在线解析接口 免费全网影视VIP视频vip会员免广告看电影!亲们 ...
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(六)RTP音视频传输解析层之音视频数据传输格式
一.差异 本地音视频数据格式和用来传输的音视频数据格式存在些许差异,由于音视频数据流到达客户端时,需要考虑数据流的数据边界.分包.组包顺序等问题,所以传输中的音视频数据往往会多一些字节. 举个例子,有 ...
- OpenCV源码解析
OpenCV K-means源码解析 OpenCV 图片读取源码解析 OpenCV 视频播放源码解析 OpenCV 追踪算法源码解析 OpenCV SIFT算法源码解析 OpenCV 滤波源码分析:b ...
- OpenCV视频读取播放,视频转换为图片
转载请注明出处!!! http://blog.csdn.net/zhonghuan1992 OpenCV视频读取播放,视频转换为图片 介绍几个有关视频读取的函数: VideoCapture::Vide ...
- OpenCV读写图像文件解析
OpenCV读写图像文件解析 imdecode 从内存中的缓冲区读取图像. C++:Mat imdecode(InputArray buf, int flags) C++:Mat imdecode(I ...
- opencv 视频处理相关
包含视频格式知识(编解码和封装格式):如何获取视频信息及视频编解码格式:opencv读取及保存视频,及opencv fourcc编码格式 一.基础知识 视频的编解码格式和封装格式 参考如山似水 视频编 ...
随机推荐
- 请收藏,Linux 运维必备的 40 个命令总结,收好了~
点击上方"开源Linux",选择"设为星标" 回复"学习"获取独家整理的学习资料! 1.删除0字节文件 find -type f -size ...
- 【Electron】使用 build-tools 在 Windows 中编译 electron
[Electron]使用 build-tools 在 Windows 中编译 electron 提前准备 预留好磁盘空间 Git 缓存目录:%UserProfile%/.git_cache ,大概有 ...
- linux系统平均负载高(load average)
系统平均负载高(load average) 问题现象 两个案例都是:系统平均负载高,但cpu,内存,磁盘io都正常 什么是系统平均负载 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进 ...
- Bert不完全手册5. 推理提速?训练提速!内存压缩!Albert
Albert是A Lite Bert的缩写,确实Albert通过词向量矩阵分解,以及transformer block的参数共享,大大降低了Bert的参数量级.在我读Albert论文之前,因为Albe ...
- Java线程同步操作
synchronized 作用于对象实例:对给定对象加锁,进入同步代码前要获得给定对象的锁. 作用于实例方法:相当于对当前实例加锁,进入同步代码前要获得当前实例的锁. 作用于静态方法:相当于对当前类加 ...
- .NET 6 从0到1使用Docker部署至Linux环境
前言 作为一名.Net菜鸟开发者,平时对Linux接触的并不多,项目部署这一块都是运维小哥顶着,但是作为混迹在云原生项目组的人咱也不能什么都不知道,该掌握的知识还是要懂的,所以借着这次机会,梳理一下项 ...
- 开源项目 PM 浅谈如何设计官网
有用户反馈进入官网首页光秃秃的一片,大家忙着做产品,忽略了官网的建设,惭愧惭愧. 确实,极简风格和极其简单还是有很大区别的. 旧的 Web 端 除了极其简单之外,它还有一个小问题, ...
- ExtJS 布局-Auto布局(Auto Layout)
更新记录 2022年5月30日 开启本篇 1.说明 auto布局是大部分容器默认的布局类型. auto布局通常是从上到下进行堆叠,auto布局不会设置子组件的宽度,默认与容器一样的宽度. 类似于HTM ...
- TypeScript(3)基础类型
基础类型 TypeScript 支持与 JavaScript 几乎相同的数据类型,此外还提供了实用的枚举类型方便我们使用. 布尔值 最基本的数据类型就是简单的true/false值,在JavaScri ...
- UiPath保存图片操作的介绍和使用
一.保存图像 (Save Image)的介绍 可以将图像保存到磁盘的一种活动 二.保存图像 (Save Image)在UiPath中的使用 1. 打开设计器,在设计库中新建一个Sequence,为序列 ...