在 iPad 上使用 OpenCV 避免碰撞

2024-05-03

我正在开展一个项目,需要使用 OpenCV 实现碰撞避免。这是在 iOS 上完成的(iOS 5 及以上版本即可)。

项目目标: 这个想法是将 iPad 安装在汽车仪表板上并启动应用程序。应用程序应该从相机中抓取帧并进行处理,以检测汽车是否会与任何障碍物发生碰撞。

我对任何类型的图像处理都是新手,因此我在这个项目中陷入了概念层面。

到目前为止我所做的:

  • 看了一下 OpenCV 并在网上阅读了相关内容。使用 Lukas-Kanade 金字塔方法实现碰撞避免。这是正确的吗?
  • 使用该项目作为起点:http://aptogo.co.uk/2011/09/opencv-framework-for-ios/ http://aptogo.co.uk/2011/09/opencv-framework-for-ios/它在我的 iPad 上成功运行,并且拍摄功能也正常工作,这意味着相机拍摄得到了很好的集成。我更改了 processFrame 实现以尝试光流而不是 Canny 边缘检测。这是函数(尚未完成)。

        -(void)processFrame {
        int currSliderVal = self.lowSlider.value;
        if(_prevSliderVal == currSliderVal) return;
        cv::Mat grayFramePrev, grayFrameLast, prevCorners, lastCorners, status, err;
    
        // Convert captured frame to grayscale for _prevFrame
        cv::cvtColor(_prevFrame, grayFramePrev, cv::COLOR_RGB2GRAY);
        cv::goodFeaturesToTrack(grayFramePrev, prevCorners, 500, 0.01, 10);
        // Convert captured frame to grayscale for _lastFrame
        cv::cvtColor(_lastFrame, grayFrameLast, cv::COLOR_RGB2GRAY);
        cv::goodFeaturesToTrack(grayFrameLast, lastCorners, 500, 0.01, 10);
    
        cv::calcOpticalFlowPyrLK(_prevFrame, _lastFrame, prevCorners, lastCorners, status, err);
        self.imageView.image = [UIImage imageWithCVMat:lastCorners];
        _prevSliderVal = self.lowSlider.value;
    }
    
  • 了解光流以及如何使用它(概念上)检测即将发生的碰撞。摘要:如果一个对象的尺寸不断增大,但向框架的任何边缘移动,则它不是碰撞路径。如果一个物体的尺寸不断增大,但没有向任何边缘移动,那么它就处于碰撞路径上。这是正确的吗?
  • 这个项目(http://se.cs.ait.ac.th/cvwiki/opencv:tutorial:optical_flow)似乎正在做我想要实现的目标。但通过阅读代码我不明白它是如何做到的。我无法运行它,因为我没有 Linux 盒子。我读了这个网页上的解释,似乎得出了一个同形异义矩阵。这个结果如何用于避免碰撞?

除了上面提到的四点之外,我还阅读了很多有关该主题的内容,但仍然无法将所有内容放在一起。

这是我的问题(请记住我是这方面的新手)

  1. 如何使用光流来检测即将发生的碰撞?我的意思是,假设我能够从函数 cv::calcOpticalFlowPyrLK() 获得正确的结果,我如何从那里向前推进以检测与框架上任何对象即将发生的碰撞?是否可以测量与我们最有可能碰撞的物体的距离?

  2. 是否有一个示例工作项目可以实现此功能或任何类似的功能,我可以看看。我在 eosgarden.com 上查看了该项目,但似乎没有实现任何功能。

  3. 在上面的示例代码中,我将 lastCorners 转换为 UIImage 并在屏幕上显示该图像。这向我显示了一张图像,屏幕上只有彩色水平线,与我的原始测试图像没有任何相似之处。这是该函数的正确输出吗?

  4. 我在理解这个项目中使用的数据类型时遇到了一些困难。 InputArray、OutputArray 等是 OpenCV API 接受的类型。然而在 processFrame 函数中,cv::Mat 被传递给 Canny 边缘检测方法。我是否将 cv::Mat 传递给 calcOpticalFlowPyrLK() 以获取 prevImage 和 nextImage?

提前致谢 :)

Update:找到了这个示例项目(http://www.hatzlaha.co.il/150842/Lucas-Kanade-Detection-for-the-iPhone)。它无法在我的 Mac 上编译,但我想由此我将拥有一个光流的工作代码。但我仍然无法弄清楚,如何通过跟踪这些点来检测阻碍碰撞。如果你们中有人能回答Qts。第一,这会有很大的帮助。

Update看起来光流是用来计算 FoE(扩展焦点)的。可以有多个 FoE 候选人。并使用 FoE,得出 TTC(碰撞时间)。后半部分我不是很清楚。但是,到目前为止我是正确的吗?OpenCV 是否实现 FoE 和/或 TTC?


1

如何使用光流来检测即将发生的碰撞?

我从未使用过光流,但第一个谷歌请求给了我这篇论文:

使用光流进行障碍物检测 http://www.araa.asn.au/acra/acra2005/papers/low.pdf

我不知道你是否已经读过。它展示了如何估计每个角度的接触时间。

2

这向我显示了一张图像,屏幕上只有彩色水平线,与我的原始测试图像没有任何相似之处。

我认为 goodFeaturesToTrack 的输出不是图像,而是点表。例如,参见如何在 Python 示例中使用它们 http://opencv.willowgarage.com/documentation/python/cookbook.html#using-goodfeaturestotrack(在旧版本的 OpenCV 中)。这可能同样适用于 calcOpticalFlowPyrLK 的输出。先看看debug里有什么。我通常使用 Python + OpenCV 来理解不熟悉的 OpenCV 函数的输出是什么。

4

我在理解这个项目中使用的数据类型时遇到了一些困难。 InputArray、OutputArray 等是 OpenCV API 接受的类型。然而在 processFrame 函数中,cv::Mat 被传递给 Canny 边缘检测方法。我是否将 cv::Mat 传递给 calcOpticalFlowPyrLK() 以获取 prevImage 和 nextImage?

来自文档 http://docs.opencv.org/modules/core/doc/basic_structures.html#inputarray:

这是用于将只读输入数组传递到 OpenCV 函数的代理类。 ...._InputArray是一个可以构造的类Mat, Mat_<T>, Matx<T, m, n>, std::vector<T>, std::vector<std::vector<T> > or std::vector<Mat>。它也可以从矩阵表达式构造。

所以你可以通过Mat。一些较旧的功能仍然需要only Mat.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 iPad 上使用 OpenCV 避免碰撞 的相关文章

随机推荐

  • 作为属性的类引用

    谷歌对于这类搜索毫无用处 因为你会得到数亿个结果 其中没有一个与特定问题相关 问题很简单 Delphi 中是否可以有类引用属性 如果是这样 怎么办 这是我尝试过的 type TMyObject class end TMyObjectClas
  • 标准在哪里谈论别名?

    C 标准中哪里谈到了别名 我查看了目录 没有看到 别名 这个词 我试图查看一个定义规则 3 2 但搜索 别名 没有结果 我不知道它可能在哪里 我正在寻找内存别名 别名主要在 3 10 basic lval 10中讨论 If a progra
  • 无法从 WebDriver 获取正确的控制台日志(Chrome、C#)

    我在 Selenium WebDriver C Chrome 浏览器中编写了以下微测试 它没有用 但这里不是这种情况 Test public void T2 API 001 PrintingAlerts pgactions OpenData
  • 为 Rails 3 应用程序制作自定义插件/gem/引擎

    我正在遵循指南http edgeguides rubyonrails org plugins html http edgeguides rubyonrails org plugins html而且它似乎有点过时了 您能看一下并告诉我哪些部分
  • 比较 .NET 中的两个字节数组

    我怎样才能快速做到这一点 当然我可以这样做 static bool ByteArrayCompare byte a1 byte a2 if a1 Length a2 Length return false for int i 0 i
  • 识别 Windows 版本

    我正在编写一个打印出详细 Windows 版本信息的函数 输出可能是这样的元组 32bit XP Professional SP3 English 它将支持 Windows XP 及更高版本 我一直坚持获取 Windows 版本 例如 专业
  • 使用 Flask 时在 Python 中实现持久数据库连接的最佳实践

    我的问题是关于在生产环境或其他关注性能的环境中使用 Flask 时处理数据库连接的推荐方法 在 Flask 中 g 对象可用于存储内容 并且可以将打开的数据库连接放置在那里 以允许应用程序在同一请求期间的后续数据库查询中重用它们 但是 g
  • 如何使用 NavigationStack 和 SwiftUI 发送额外数据?

    我有三个viewsA B 和 C 用户可以从 A 导航到 B 也可以从 A 导航到 C 用户可以从 B 导航到 C 现在我想区分用户是从 A 到 C 还是从 B 到 C 所以我在寻找如何在 NavigationStack 中传递额外的数据
  • 如何在mvc 4中使用多重选择?

    我想使用多重选择Chosen http harvesthq github com chosen 我有类似的技能模型 public class Skill public int Id get set public string Name ge
  • MySQL 中复制一条记录

    我有一个表 我想复制表中的特定行 我知道这不是最好的方法 但我们正在寻找快速解决方案 这比我最初想象的要难 我需要做的就是将整个记录复制到 MySql 中自动增量表中的新记录 而不需要指定每个字段 这是因为该表将来可能会发生变化 并且可能会
  • 在 sidekiq 上配置 redis 身份验证

    我想我错过了一些东西 因为我在文档中找不到如何编写 redis 实例的用户名和密码以与 sidekiq 一起使用 有没有办法做到这一点 或者是通过 ENV 变量 Sidekiq 将无法识别的 Redis 选项直接传递给 Redis 驱动程序
  • 在 r 中使用 reprex 包创建可重现的示例,其中正在读取本地文件

    我经常使用reprex reprex创建可重复的示例R代码以获得其他人的帮助以消除我的代码中的错误 通常 我使用数据集创建最小的示例 例如iris or mtcars而且效果很好 但我总是无法使用reprex任何时候我需要使用我的own数据
  • NestJS 无法解析 UsersModule 的依赖关系

    NestJS 无法解析 UsersModule 的依赖关系 错误 错误 Nest 无法解析 UsersModule 的依赖关系 请 验证 0 参数在当前上下文中是否可用 应用程序模块 ts Module imports ConfigModu
  • 从 SQL Server 中调用 Python 文件

    我的文件名中有 Python 脚本 C Python HL py 在此 Python 脚本中 有预测模型以及对 SQL 数据库中某些表的更新 我想将此文件称为 SQL 作业 我怎样才能做到这一点 这个问题不一样 如何在 SQL Server
  • 将泛型类转换为接口

    我在将泛型类转换为它正在实现的接口时遇到问题 我的代码是这样的 interface foo void foobar class bar foo public void foobar throw new NotImplementedExcep
  • 如何在 Rails Active Admin 中添加 Colorpicker?

    我想实现这个http www eyecon ro colorpicker about http www eyecon ro colorpicker about或活动管理表单之一中的任何其他颜色选择器 任何帮助表示赞赏 谢谢 GS 因为你想使
  • 从 Oracle Forms 调用 Microsoft Word 拼写检查时出现 Vista 焦点问题

    朋友们 在 Vista 上测试我们的 Oracle Forms 应用程序时 我发现了一个有趣的 挑战 应用程序可以调用 Microsoft Word 拼写检查器对字段执行拼写检查 调用时 用户将看到标准的 Microsoft Word 拼写
  • 我的绘图存在坐标/glortho 问题

    I have made a bit of a change to my code in the last couple of hours as everything was messy with my grid so I made it i
  • Qt Creator 中的按钮是否有隐藏属性?

    Qt Creator 属性托盘中是否有按钮的隐藏属性 我想找到一个 但找不到 我需要禁用一些按钮并隐藏一些按钮 我应该使用属性托盘还是在构造函数中进行 稍后在用户事件中 它们将被启用并显示 有些控件在调色板上具有 可见性 属性 有些则没有
  • 在 iPad 上使用 OpenCV 避免碰撞

    我正在开展一个项目 需要使用 OpenCV 实现碰撞避免 这是在 iOS 上完成的 iOS 5 及以上版本即可 项目目标 这个想法是将 iPad 安装在汽车仪表板上并启动应用程序 应用程序应该从相机中抓取帧并进行处理 以检测汽车是否会与任何