OpneCV3.x中提供了专门应用于视频稳像技术的模块,该模块包含一系列用于全局运动图像估计的函数和类。结构体videostab::RansacParams实现了RANSAC算法,这个算法用来实现连续帧间的运动估计。videostab::MotionEstimatorBase是基类中所有全局运动估计方法,videostab::MotionEstimatorRansacL2描述了一个健壮的RANSAC-based全局二维估计方法的最小化L2误差。

#include <opencv2/opencv.hpp>
#include <opencv2/videostab.hpp>
#include <string>
#include <iostream>using namespace std;
using namespace cv;
using namespace cv::videostab;string inputPath = "inputVideo.avi";
string outputPath = "outputVideo.avi";// 视频稳定输出
void videoOutput(Ptr<IFrameSource> stabFrames, string outputPath)
{VideoWriter writer;cv::Mat stabFrame;int nframes = 0;// 设置输出帧率double outputFps = 25;// 遍历搜索视频帧while (!(stabFrame = stabFrames->nextFrame()).empty()){nframes++;// 输出视频稳定帧if (!outputPath.empty()){if (!writer.isOpened())writer.open(outputPath, VideoWriter::fourcc('X', 'V', 'I', 'D'),outputFps, stabFrame.size());writer << stabFrame;}imshow("stabFrame", stabFrame);// esc键退出char key = static_cast<char>(waitKey(100));if (key == 27){cout << endl;break;}}std::cout << "nFrames: " << nframes << endl;std::cout << "finished " << endl;
}void cacStabVideo(Ptr<IFrameSource> stabFrames, string srcVideoFile)
{try{Ptr<VideoFileSource> srcVideo = makePtr<VideoFileSource>(inputPath);cout << "frame count: " << srcVideo->count() << endl;// 运动估计double estPara = 0.1;Ptr<MotionEstimatorRansacL2> est =makePtr<MotionEstimatorRansacL2>(MM_AFFINE);// Ransac参数设置RansacParams ransac = est->ransacParams();ransac.size = 3;ransac.thresh = 5;ransac.eps = 0.5;// Ransac计算est->setRansacParams(ransac);est->setMinInlierRatio(estPara);// Fast特征检测Ptr<FastFeatureDetector> feature_detector =FastFeatureDetector::create();// 运动估计关键点匹配Ptr<KeypointBasedMotionEstimator> motionEstBuilder =makePtr<KeypointBasedMotionEstimator>(est);// 设置特征检测器motionEstBuilder->setDetector(feature_detector);Ptr<IOutlierRejector> outlierRejector = makePtr<NullOutlierRejector>();motionEstBuilder->setOutlierRejector(outlierRejector);// 3-Prepare the stabilizerStabilizerBase *stabilizer = 0;// first, prepare the one or two pass stabilizerbool isTwoPass = 1;int radius_pass = 15;if (isTwoPass){// with a two pass stabilizerbool est_trim = true;TwoPassStabilizer *twoPassStabilizer = new TwoPassStabilizer();twoPassStabilizer->setEstimateTrimRatio(est_trim);twoPassStabilizer->setMotionStabilizer(makePtr<GaussianMotionFilter>(radius_pass));stabilizer = twoPassStabilizer;}else{// with an one pass stabilizerOnePassStabilizer *onePassStabilizer = new OnePassStabilizer();onePassStabilizer->setMotionFilter(makePtr<GaussianMotionFilter>(radius_pass));stabilizer = onePassStabilizer;}// second, set up the parametersint radius = 15;double trim_ratio = 0.1;bool incl_constr = false;stabilizer->setFrameSource(srcVideo);stabilizer->setMotionEstimator(motionEstBuilder);stabilizer->setRadius(radius);stabilizer->setTrimRatio(trim_ratio);stabilizer->setCorrectionForInclusion(incl_constr);stabilizer->setBorderMode(BORDER_REPLICATE);// cast stabilizer to simple frame source interface to read stabilized framesstabFrames.reset(dynamic_cast<IFrameSource*>(stabilizer));// 4-videoOutput the stabilized frames. The results are showed and saved.videoOutput(stabFrames, outputPath);}catch (const exception &e){cout << "error: " << e.what() << endl;stabFrames.release();}
}int main(int argc, char* argv[])
{Ptr<IFrameSource> stabFrames;// 输入输出视频准备cacStabVideo(stabFrames, inputPath);stabFrames.release();return 0;
}

opencv3 视频稳像相关推荐

  1. OpenCV3.0.0下的视频稳像代码,效果不错哦

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 视频稳像技术中最核心的技术是运动估计,其实就是对 ...

  2. 视频稳像(Video Stabilization)

    原文:https://blog.csdn.net/hjl240/article/details/52683738 开源:关键词 Video Stabilization 不错: https://gith ...

  3. 【1】视频稳像——调研

    0. 写在前面 需求分析: 当前项目情况为,设备固定位置安装,360度旋转采集图像,2s刷新一圈全景图像.当前问题为:设备安装于铁塔高处时,由于风力过高导致铁塔本身晃动导致的图像抖动.若是底座稳定,即 ...

  4. 防抖技术 | OpenCV实现视频稳流

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|OpenCV学堂 这篇文章分享了一个视频防抖的策略,这个 ...

  5. opencv python 多帧降噪算法_防抖技术 | OpenCV实现视频稳流

    在这篇文章中,我们将学习如何使用OpenCV库中的点特征匹配技术来实现一个简单的视频稳定器.我们将讨论算法并且会分享代码(python和C++版),以使用这种方法在OpenCV中设计一个简单的稳定器. ...

  6. 艾瑞数据显示搜狐视频稳居第二 美剧营销占先机

    凭借在选剧与购剧方面有着成熟运营经验的搜狐视频,在行业当中的优势日渐呈现,根据艾瑞刚刚公布的视频网站最新排名显示,搜狐视频以日均2201万人次的覆盖量稳居行业第二的位置. 数据同时显示,优酷以3222 ...

  7. 实战内容(14)- 音视频技术如何为元宇宙提供全真稳的全新体验之漫话腾讯云音视频

    目录 引言 多年积累后的"全真稳"腾讯音视频 多面手,腾讯云音视频的有多"全"? 身临其境,腾讯云音视频有多"真" 固若金汤,腾讯云音视频有 ...

  8. 手机拍视频最怕抖,只能靠AI拯救了

    视学算法报道 转载自:机器之心 编辑:陈萍.维度 视频画面的稳定与否,很大程度上影响着观感的舒适度!如何补偿视频抖动,拯救手抖党,来自台湾大学.谷歌等研究机构的学者,提出了防抖新算法,视频拍摄--稳. ...

  9. 音视频技术开发周刊 | 233

    每周一期,纵览音视频技术领域的干货. 新闻投稿:contribute@livevideostack.com. 数据抓包工具:看看竞品的协议都做了哪些优化丨音视频工具 据抓包是我们做业务测试.竞品分析的 ...

最新文章

  1. 参加软件测试培训需要学什么技术
  2. 确定安全威胁与漏洞-A
  3. 面试必问:十大经典排序算法总结
  4. Linux下SVN命令总结
  5. 创建交叉表_【零售】Tableau LOD+表计算做交叉购买分析
  6. html5中在canvas上绘图
  7. mvc 视图和模型的对应_通过在酒吧订购饮料来解释模型视图控制器(MVC)
  8. 3.深度学习练习:Planar data classification with one hidden layer
  9. 应用容器Application container
  10. 【英语学习】【English L06】U06 Banking L1 How can I save money?
  11. 如何在Outlook 2003和OWA中允许接受EXE附件
  12. 10 分钟看懂消息队列 RocketMQ
  13. 请问 土壤粒径的多重分形维数怎么计算?有matlab计算代码吗?
  14. 合唱队形(c++DP)
  15. 应用之星教你制作高下载量的App
  16. python计算实例_python实例: 税率计算
  17. ‘lengths‘ argument should be a 1D CPU int64 tensor, but got 1D cuda:0 Long tensor
  18. Corolado软件峰会关于Geronimo的介绍
  19. 全球及中国公共安全记录管理系统行业发展现状及前景趋势预测报告(2022-2027)
  20. 如何才能让你的一天卓有成效

热门文章

  1. (C++)归并排序的递归与非递归实现
  2. access百度翻译 get_百度AI攻略:智能上色
  3. 序列建模:时间卷积网络取代RNN(An Empirical Evaluation of Generic Convolutional and Recurrent)论文 pdf
  4. Appro DM8127 IPNC 挂载NFS遇到的问题及解决
  5. Python并发编程实例教程
  6. windowsXP用户被禁用导致不能网站登录
  7. 中秋节,送上一次非常有趣的SQL优化实战经历
  8. 5 修改request对象变量_【总结】前端5大常见设计模式,代码一看你就懂!
  9. #pragma once与#ifndef的区别
  10. 大数据和数据库的理解文章收藏