Android-图像识别项目OpenCV(4):开发思路以及问题

上一篇文章:Android-图像识别项目OpenCV(3):程序目标以及单独发布

六、开发思路

  搭建好环境和做好各种准备功夫,接下来就开始我们的开发之路。

  首先,我们先查看一下官方教程文档,看有没有我们需要的例子。我找到了一个二维图像识别的例子:

  http://docs.opencv.org/doc/tutorials/features2d/feature_flann_matcher/feature_flann_matcher.html#feature-flann-matcher

  http://www.cnblogs.com/http://www.cnblogs.com/_images/Featur_FlannMatcher_Result.jpg

  这个教程是用C++写的,用计算特征点来比对两幅图像。如果我们用这个算法可得到特征点的匹配:

  http://www.cnblogs.com/http://www.cnblogs.com/_images/Feature_FlannMatcher_Keypoints_Result.jpg

  这两幅图共有22个特征点,我们到时就可用多于多少个特征点便认为两幅图里的产品为同一个产品来判定了。

  

遇到问题

  上面的代码例子是用C++写的,当我打算用JNI进行调用的时候,却发现了一个大问题。

  例子中的步骤一用到SURF算法来识别图中的特征点:  

  //-- Step 1: Detect the keypoints using SURF Detector
  int minHessian = 400;

  SurfFeatureDetector detector( minHessian );

  std::vector<KeyPoint> keypoints_1, keypoints_2;

  detector.detect( img_1, keypoints_1 );
  detector.detect( img_2, keypoints_2 );

  但是,在Android SDK的JNI库文件里面是不包含SURF算法的。在之后的两天里,我Google了无数个关键词,还是找不到如何在Android中使用这个算法的方法。后来,我在官方论坛、Google groups和StackOverflow上都进行了提问。

解决方法

   在发出问题的第二天,我在StackOverflow上收到了某位外国友人的答复,感谢他:

  http://stackoverflow.com/questions/12929709/how-to-use-the-opencv-c-specific-sample-on-the-android-platform

  他提醒我用另外一个包含在Android SDK的类ORB来解决这个问题,我查了一下,确实有这个类,并且用法也是差不多的。另外,外国友人说这个类的运行效率在手机上还高一点。吐槽下,OpenCV4Android的支持确实差了一点,教程文档基本没有,基本上是靠硬啃API Reference来开发。

 

注:博客文章为本人原创,转载请标明出处为本人博客:http://www.cnblogs.com/TseChiHoi/

posted @ 2012-10-19 10:58  VinceXie  阅读(9474)  评论(7编辑  收藏  举报