使用 OpenCV 进行视频稳定

2023-12-22

我有一个用移动摄像机拍摄的视频,其中包含移动的物体。我想稳定视频,以便所有静止物体在视频源中保持静止。我怎样才能做到这一点OpenCV?

即,例如,如果我有两个图像 prev_frame 和 next_frame,我该如何转换下一帧所以摄像机看起来是静止的?


我可以建议以下解决方案之一:

  1. 使用局部高级特征:OpenCV包含SURF,因此:对于每一帧,提取SURF特征。然后构建特征 Kd-Tree(也在 OpenCV 中),然后匹配每两个连续帧以找到对应特征对。将这些对输入 cvFindHomography 来计算这些帧之间的单应性。根据(组合..)单应性扭曲框架以稳定。据我所知,这是一种非常强大和复杂的方法,但是 SURF 提取和匹配可能非常慢
  2. 如果您预计两帧之间只有较小的移动,例如,您可以尝试使用“不太稳健”的功能来执行上述操作。使用 Harris 角点检测并在两个帧中构建彼此最接近的角点对,然后将其输入到 cvFindHomography,然后如上所述。可能更快但不太健壮。
  3. 如果您将移动限制为翻译,您也许可以用更...简单的东西替换 cv FindHomography,以获取特征对之间的翻译(例如平均值)
  4. 使用相位相关(参考。http://en.wikipedia.org/wiki/Phase_correlation http://en.wikipedia.org/wiki/Phase_correlation),如果您期望仅在两个框架之间进行翻译。 OpenCV 包括 DFT/FFT 和 IFFT,请参阅链接的维基百科文章中的公式和解释。

EDIT为了以防万一,我最好明确提及三点:

  1. 基于单应性的方法可能非常精确,因此静止的物体将保持静止。然而,单应性还包括透视畸变和缩放,因此结果可能看起来有点……不常见(或者甚至因某些快速移动而扭曲)。虽然很准确,但这可能在视觉上不太令人愉悦;因此,请将此用于进一步处理或取证等。但你应该尝试一下,对于某些场景/动作来说也可能会非常令人愉悦。
  2. 据我所知,至少有几个免费的视频稳定工具使用相位相关。如果您只是想“不晃动”相机,这可能会更好。
  3. 这个领域正在进行相当多的研究。您会在一些论文中发现一些更复杂的方法(尽管它们可能需要的不仅仅是 OpenCV)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OpenCV 进行视频稳定 的相关文章

  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 为什么极端下派生类(多重虚拟继承)的大小包括超类成员大小的两倍?

    include
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • C# HashSet 只读解决方法

    这是示例代码 static class Store private static List
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 外键与独立关系 - Entity Framework 5 有改进吗?

    我读过了several http www ladislavmrnka com 2011 05 foreign key vs independent associations in ef 4 文章和问题 https stackoverflow
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 不同类型指针之间的减法[重复]

    这个问题在这里已经有答案了 我试图找到两个变量之间的内存距离 具体来说 我需要找到 char 数组和 int 之间的距离 char data 5 int a 0 printf p n p n data 5 a long int distan
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 方法优化 - C#

    我开发了一种方法 允许我通过参数传入表 字符串 列数组 字符串 和值数组 对象 然后使用这些参数创建参数化查询 虽然它工作得很好 但代码的长度以及多个 for 循环散发出一种代码味道 特别是我觉得我用来在列和值之间插入逗号的方法可以用不同的
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 如何从 ODBC 连接获取可用表的列表?

    在 Excel 中 我可以转到 数据 gt 导入外部数据 gt 导入数据 然后选择要使用的数据源 然后在提供登录信息后 它会给我一个表格列表 我想知道如何使用 C 以编程方式获取该列表 您正在查询什么类型的数据源 SQL 服务器 使用权 看
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 如何将 Docker Hub 镜像拉取到 Google Cloud Run?

    我正在尝试将 Docker 映像拉入 Google Cloud Run 我发现我可能需要先将其拉到 Google 容器注册表 但我可以以某种方式避免它吗 另外 我宁愿直接从源头获取它以使其保持最新 我查看了该项目 最后在 Cloud Run
  • Java 对象、更改字段侦听器、设计模式

    有一个类 public class MyClass private String field1 private String field2 private String field3 getters setters 然后我们更新一些字段 M
  • 尽管 flex-basis: 0 [重复],Flexbox 项目的宽度并不相等

    这个问题在这里已经有答案了 我在 Flexbox 中有 4 列 我希望它们的宽度相等 那个有overflow hidden比其他人占据更多的位置 而我无法修复它 在我看来 我遇到了与这篇文章中所述相同的问题 Flexbox 和溢出隐藏无法正
  • 使用“从浏览器中单击”按钮打开客户端的桌面应用程序 - Python/HTML [重复]

    这个问题在这里已经有答案了 我想打开桌面应用程序 例如 记事本 Powerpoint Putty 附上它在共享点上如何工作的图像 随附的示例图像显示了如何通过单击按钮打开 Microsoft Teams 我需要这个精确的复制品 单击 打开
  • Visual Studio 2015 调试并继续

    我们将环境从 Visual Studio 2008 更改为 2015 更新 1 现在我们遇到了一些奇怪的调试行为 当我们遇到断点并更改一些代码并继续时 我们无法再在快速监视或立即窗口中看到某些类型的变量内容 例如数据表 图像 A type
  • 如何测试 PHP 程序? [复制]

    这个问题在这里已经有答案了 有没有办法测试程序代码 我一直在研究 PHPUnit 它似乎是创建自动化测试的好方法 然而 它似乎是面向面向对象的代码 是否有过程代码的替代方案 或者我应该在尝试测试网站之前将网站转换为面向对象 这可能需要一段时
  • System.Text.Json 将字典序列化为数组

    是否可以使用 System Text Json 将字典序列化 和反序列化 为数组 代替 hello world 我需要将我的字典序列化为 key hello value world 最好不必在我的类的字典属性上设置属性 使用 newtons
  • 在Python中的图像中的表格上创建边框

    我有一个图像 其中有一个表格和一些其他数据 我需要为表格绘制边框以分隔每个单元格 My image looks like this What i am trying 1 dilating the image to create contin
  • java读取上传文件的内容

    我知道如何上传文件
  • 如何拦截自定义 HTTP 标头值并将其存储在 Wicket 的 WebSession 中?

    我需要从每个请求中获取特定的自定义 HTTP 标头值并将其放入 WebSession 中 以便以后可以在任何网页上使用它 我相信 Wicket 的方法是使用一个自定义类来扩展具有适当访问器的 WebSession 我的问题是 我需要什么样的
  • Iphone SDK,从 UIImage 创建视频

    我需要根据所选图像创建视频 我有代码它应该可以工作 但在附加缓冲区时给出错误 这就是两种类型图像的保存方式 void imagePickerController UIImagePickerController picker didFinis
  • 多个控制器和指令之间的通信

    我有一个支持 HTML5 Canvas 可视化的指令 该指令具有多种方法来修改可视化的不同部分 问题是具有不同父 子 兄弟关系的多个控制器需要与该指令进行通信 现在我已经将这种非常糟糕的方式连接起来 将事件发送到指令的父控制器 然后将它们广
  • Magento 1.7:在 2 列模板中以全宽显示类别页面上的类别图像

    无法找到运行 Magento 1 7 时此问题的解决方案 上面主栏中显示的类别 我想将其显示在两列上方的页面宽度上 这是一个例子 http www vimodos nl schoenen art sex 92 http www vimodo
  • 在struts 2中调用带参数的方法?

    我在 struts 2 动作类中给出了下面的方法 public String add String boo codes here 我想调用add方法 还有我的struts xml
  • 如何在 PHP 中对数字进行四舍五入

    我经营一个 woocommerce 网站 重量以磅为单位 我需要将它们转换为公斤 我从网站下载了这个脚本 它完成了这项工作 但它设置了带有很多小数的新权重 不知道如何四舍五入 我试图使用round new weight 2 但它没有接受或不
  • 串口未接收到任何数据

    我正在开发需要与 COM 端口交互的程序 通过本次问答了解到 NET SerialPort DataReceived 事件未触发 https stackoverflow com questions 2281618 net serialpor
  • 如何避免用户提交的MySQL数据库存储重复的内容

    我正在创建一个网站 允许用户列出最多 5 家与他们关联的公司 当其他用户搜索这些公司时 与该公司关联的所有用户都会显示在搜索结果中 用户将通过文本输入字段提交这些公司 如何避免用户提交重复的公司 例如 如果UserA提交了一家名为stack
  • 将所有存储过程和函数从一个 SQL Server 一次性复制到另一个 SQL Server 的最简单方法

    我需要将所有存储过程和函数立即从一个 SQL Server 数据库复制到另一个数据库 有可能吗 在 SQL Server Management Studio 中 转到对象资源管理器 找到你的数据库 右键单击它 gt Tasks gt Gen
  • ThreeJS collada 文件未居中

    我是 ThreeJS 的新手 我正在尝试将 collada 文件加载到查看器中 我首先复制 Elf colladaLoader 演示的代码 https trijs org examples webgl loader collada http
  • 使用 OpenCV 进行视频稳定

    我有一个用移动摄像机拍摄的视频 其中包含移动的物体 我想稳定视频 以便所有静止物体在视频源中保持静止 我怎样才能做到这一点OpenCV 即 例如 如果我有两个图像 prev frame 和 next frame 我该如何转换下一帧所以摄像机