热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

OpenCV学习笔记(七)Lucas…

原文地址:OpenCV学习笔记(七)Lucas-Kanade光流跟踪点的选择作者:ziguangzeng在上一节提到了Luc
原文地址:OpenCV学习笔记(七)Lucas-Kanade光流跟踪点的选择作者:ziguangzeng

在上一节提到了Lucas-Kanade光流跟踪算法,是一种准确,成熟,比较容易实现的物体跟踪算法,对画面中固定点会进行准确快速的跟踪。但是在视频中如何对移动物体进行跟踪以及跟踪点的选择,则是另一个需要解决的问题。下面我们来详细了解一下。

 

首先,在视频中移动的物体与静止的物体的一种区别就是,在前一帧与当前帧之间,静止物体是没有运动的,运动物体的运动造成了在这两帧之中有一个运动的区域,两帧的差我们可以用cvAbsDiff来计算出,我们可以通过定位这个区域来设置需要跟踪的点。这个运动的区域我们可以通过OpenCV的查找轮廓的方法来找到,这里使用了cvFindContours 方法,因为我们只需找出运动区域的轮廓,所以我们需要找到的是物体外部轮廓,因而我们需要查找轮廓的方法为:CV_RETR_EXTERNAL,而生成的轮廓会保存在一个CvSeq中。需要注意的是,我们可以在视频画面中加入画面的平滑处理来去掉一些噪点,比如高斯滤波。

 

其次,既然我们有了运动区域的轮廓,我们就要把这个区域转化为需要被跟踪的点,一种普遍的方法就是我们遍历生成轮廓的CvSeq 中的每一个轮廓,再遍历每一个轮廓中的每个点,把这些点加在一起算出平均值,这个平均值就是这个轮廓的中心点。这种方法虽然正确,但是计算速度比较慢,因为计算量比较大,对于大的轮廓计算的点会非常多。另一种方法则是比较取巧的方法,计算速度很快,效果也非常好。因为我们需要的是对运动物体准确的跟踪,对于定位运动的物体则不需要很精确,只要知道物体在哪里运动就可以了。所以在这里,我们把查找到的每个轮廓用cvMinAreaRect2 转化为CvBox2D类型。这个类型的好处就是可以直接调用CvBox2DCenter 变量来生成中心点,这个中心店为轮廓近似四边形的中心点,与轮廓点的平均值点在效果上等价。

 

最后,我们把两帧之间所有运动生成的这些点保存在一个Vector 里,把这个Vector 作为输入点的序列发送到L-K算法中。通过L-K算法计算出这些点在当前帧的运动终点,再在下一帧把这些终点作为起始点再传入L-K算法继续计算。在L-K计算过程中,如果有新的运动的点加入,我们就继续把Vector中的新的点传入到L-K 中。

 

至此,L-K算法的自动跟踪已经完毕,我们可以通过加入一些滤波以及边缘检测来更准确的定位需要跟踪的点,而检测出来的运动点的位移偏量,比如X方向与Y方向,或者Z方向(需要两个摄像头),可以当做参数传入到相应的运动或者显示模块中,产生相对应的效果。



推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 汇编语言等号伪指令解析:探究其陡峭的学习曲线
    汇编语言以其独特的特性和复杂的语法结构,一直被认为是编程领域中学习难度较高的语言之一。本文将探讨汇编语言中的等号伪指令及其对初学者带来的挑战,并结合社区反馈分析其学习曲线。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
  • 基于结构相似性的HOPC算法:多模态遥感影像配准方法及Matlab实现
    本文介绍了一种基于结构相似性的多模态遥感影像配准方法——HOPC算法,该算法通过相位一致性模型构建几何结构特征描述符,能够有效应对多模态影像间的非线性辐射差异。文章详细阐述了HOPC算法的原理、实验结果及其在多种遥感影像中的应用,并提供了相应的Matlab代码。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文详细介绍了Hive中用于日期和字符串相互转换的多种函数,包括从时间戳到日期格式的转换、日期到时间戳的转换,以及如何处理不同格式的日期字符串。通过这些函数,用户可以轻松实现日期和字符串之间的灵活转换,满足数据处理中的各种需求。 ... [详细]
  • 本文将详细介绍多个流行的 Android 视频处理开源框架,包括 ijkplayer、FFmpeg、Vitamio、ExoPlayer 等。每个框架都有其独特的优势和应用场景,帮助开发者更高效地进行视频处理和播放。 ... [详细]
  • Python中HOG图像特征提取与应用
    本文介绍如何在Python中使用HOG(Histogram of Oriented Gradients)算法进行图像特征提取,探讨其在目标检测中的应用,并详细解释实现步骤。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 本文探讨了如何在Classic ASP中实现与PHP的hash_hmac('SHA256', $message, pack('H*', $secret))函数等效的哈希生成方法。通过分析不同实现方式及其产生的差异,提供了一种使用Microsoft .NET Framework的解决方案。 ... [详细]
  • andr ... [详细]
  • JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
author-avatar
miwn4_651
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有