使用ORB逐步检测对象

def*_*era 2 android opencv kdtree orb opencv4android

我必须创建一个Android应用程序来识别相机中的一些物体(汽车方向盘,车轮).我尝试使用哈尔分类器,但没有成功,我的时间不多了(这是一个学校项目).所以我决定寻找另一种方式.我为我的目标找到了一些其他方法 - ORB.我发现在这个答案怎么做.我的问题是事情搞得一团糟.你能否给我一步一步的答案,告诉我如何在我给出的链接中实现问题的答案:

从提取特征点到训练KD树并将其用于来自摄像机的每个帧.

奖金问题:你能给出特征点的定义吗?这是我无法理解的.使用ORB会慢慢检测吗?我知道OpenCV可以在原生android中使用,不会让事情变得更快吗?

我需要尽快创建这个应用程序.请帮忙!

小智 6

我目前正在开发类似的应用程序.出于以下几个原因,我建议首先使用单个参考图像进行处理:

  1. 如果您刚刚开始,它更容易理解和理解,您可以稍后更改它.
  2. 对于Android应用程序,您具有有限的处理能力,因此更多图像=更低的fps.

您应该看看OpenCV教程非常有帮助.一旦您浏览了"OpenCV for Android SDK"部分并理解了这三个教程,您就可以非常轻松地添加允许您分析视频源的功能.

我在推荐应用程序时建议遵循的基本逻辑路径是:

  1. 读入参考图像.
  2. 创建并使用FeatureDetector,DescriptorExtractor和DescriptorMatcher.
  3. 使用上面的方法来检测关键点,然后描述关键点(前两个,不要忘记将其转换为垫子然后再转换为灰度).
  4. 每次从相机中获取一个帧时,重复步骤3.然后比较图像中的关键点(使用第二部分2.).
  5. 使用结果确定是否存在匹配(如果有,则在其周围绘制一个框或其他内容).
  6. 获得一个新的框架.

尝试使其适用于单个对象,然后在其他对象中添加.您可以添加的另一件事是一开始的屏幕,允许用户选择他们想要搜索的内容.

ORB也相当快,特别是与SIFT和SURF相比.我在HTC One上获得了大约3fps的单个参考图像.