首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCV在iPad上的避碰

OpenCV在iPad上的避碰
EN

Stack Overflow用户
提问于 2012-07-19 04:15:11
回答 1查看 2.5K关注 0票数 3

我正在进行一个项目,在这个项目中,我需要使用OpenCV实现冲突避免。这是在iOS上完成的(iOS 5和更高版本就可以了)。

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

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

我到目前为止所做的事:

  • 看了一下OpenCV,并在网上读到了它。采用Lukas-Kanade金字塔方法实现了避碰。是这样的吗?
  • 使用这个项目作为起点:http://aptogo.co.uk/2011/09/opencv-framework-for-ios/成功地在我的iPad上运行,捕获功能也能工作,这意味着相机捕获是很好的集成。我改变了processFrame实现尝试光流而不是Canny边缘检测。这是函数(尚未完成)。 -(void)processFrame { int currSliderVal = self.lowSlider.value;if(_prevSliderVal == currSliderVal)返回;cv:Mat grayFramePrev、grayFrameLast、prevCorners、lastCorners、status、err;//将捕获帧转换为灰度表示_prevFrame cv::cvtColor(_prevFrame、grayFramePrev、cv::COLOR_RGB2GRAY);cv::goodFeaturesToTrack(grayFramePrev,prevCorners,500,0.01,10);//将捕获帧转换为灰度,用于_lastFrame cv::cvtColor( grayFramePrev,);简历: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;}
  • 了解光流以及如何(概念上)使用光流来检测即将发生的碰撞。摘要:如果一个对象的大小在增长,但正在向框架的任何边缘移动,那么它就不是一个碰撞路径。如果一个物体的大小在增长,但没有向任何边缘移动,那么它就是在碰撞路径上。是这样的吗?
  • 这个项目()似乎正在做我想要实现的事情。但我不明白它是如何通过阅读代码来实现的。我无法运行它,因为我没有linux机器。我在这个网页上读到了解释,它似乎达到了一个同形矩阵。如何将这一结果用于避免碰撞?

除了上面提到的四点之外,我已经读了很多关于这个话题的文章,但是仍然不能把所有的部分放在一起。

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

  1. 光流是如何用来探测即将发生的碰撞的?我的意思是,假设我能够从cv::calcOpticalFlowPyrLK()函数中得到正确的结果,那么如何将它向前推进以检测与帧上任何对象的即将发生的碰撞?我们最有可能与之相撞的物体之间的距离有可能测量吗?
  2. 是否有实现此功能或任何类似功能的示例工作项目,我可以查看。我看了一下eosgarden.com上的项目,但似乎没有在其中实现任何功能。
  3. 在上面的示例代码中,我将lastCorners转换为UIImage,并在屏幕上显示该图像。这显示了一个图像,它只在屏幕上有彩色的水平线,与我最初的测试图像没有任何相似之处。这是该函数的正确输出吗?
  4. 我很难理解这个项目中使用的数据类型。InputArray、OutputArray等是OpenCV API所接受的类型。然而在processFrame函数中,cv::Mat被传递给Canny边缘检测方法。我是否将cv::Mat传递给calcOpticalFlowPyrLK()用于prevImage和nextImage?

(预先谢谢:)

更新:找到了这个示例项目(http://www.hatzlaha.co.il/150842/Lucas-Kanade-Detection-for-the-iPhone)。它不是在我的mac上编译的,但是我想从这里我将有一个光流的工作代码。但我还是搞不清楚,如何才能从追踪这些点中发现阻碍碰撞的因素。如果你们中有人能回答Qts的话。第一,这会有很大的帮助。

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

EN

回答 1

Stack Overflow用户

发布于 2012-07-27 23:36:56

1

光流是如何用来探测即将发生的碰撞的?

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

基于光流的障碍物检测

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

2

这显示了一个图像,它只在屏幕上有彩色的水平线,与我最初的测试图像没有任何相似之处。

我认为goodFeaturesToTrack的输出不是图像,而是点表。例如,请参见如何在Python示例中使用它们 (在OpenCV的旧版本中)。这可能也适用于calcOpticalFlowPyrLK的输出。先看看调试中有什么。我通常使用Python + OpenCV来理解不熟悉的OpenCV函数的输出。

4.

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

来自文档

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

这样你就可以通过Mat了。一些较老的函数仍然只期望Mat

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11553861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档