上一篇文章:Android-圖像識別項目OpenCV(3):程序目標以及單獨發布
六、開發思路
搭建好環境和做好各種准備功夫,接下來就開始我們的開發之路。
首先,我們先查看一下官方教程文檔,看有沒有我們需要的例子。我找到了一個二維圖像識別的例子:
這個教程是用C++寫的,用計算特征點來比對兩幅圖像。如果我們用這個算法可得到特征點的匹配:
這兩幅圖共有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上收到了某位外國友人的答復,感謝他:
他提醒我用另外一個包含在Android SDK的類ORB來解決這個問題,我查了一下,確實有這個類,並且用法也是差不多的。另外,外國友人說這個類的運行效率在手機上還高一點。吐槽下,OpenCV4Android的支持確實差了一點,教程文檔基本沒有,基本上是靠硬啃API Reference來開發。
注:博客文章為本人原創,轉載請標明出處為本人博客:http://www.cnblogs.com/TseChiHoi/。