1. 程式人生 > >Android中使用OpenCV(二)

Android中使用OpenCV(二)

Android中使用OpenCV

之前比較早的時候寫了一篇博文: AndroidStudio中配置及使用OpenCV示例 ,主要介紹瞭如何在AS中使用OpenCV,基本的配置介紹及使用示例,上傳的示例也比較潦草,使用的版本是 OPENCV_VERSION_2_4_9 ,各個版本號在OpenCV的SDK包中是可以看到的:
OpenCV-android-sdk\sdk\java\src\org\opencv\android\OpenCVLoader.java

package org.opencv.android;
import android.content.Context;

/**
 * Helper class provides common initialization methods for OpenCV library.
 */
public class OpenCVLoader { /** * OpenCV Library version 2.4.2. */ public static final String OPENCV_VERSION_2_4_2 = "2.4.2"; /** * OpenCV Library version 2.4.3. */ public static final String OPENCV_VERSION_2_4_3 = "2.4.3"; /** * OpenCV Library version 2.4.4. */
public static final String OPENCV_VERSION_2_4_4 = "2.4.4"; /** * OpenCV Library version 2.4.5. */ public static final String OPENCV_VERSION_2_4_5 = "2.4.5"; /** * OpenCV Library version 2.4.6. */ public static final String OPENCV_VERSION_2_4_6 = "2.4.6"; /** * OpenCV Library version 2.4.7. */
public static final String OPENCV_VERSION_2_4_7 = "2.4.7"; /** * OpenCV Library version 2.4.8. */ public static final String OPENCV_VERSION_2_4_8 = "2.4.8"; /** * OpenCV Library version 2.4.9. */ public static final String OPENCV_VERSION_2_4_9 = "2.4.9"; /** * OpenCV Library version 2.4.10. */ public static final String OPENCV_VERSION_2_4_10 = "2.4.10"; /** * OpenCV Library version 2.4.11. */ public static final String OPENCV_VERSION_2_4_11 = "2.4.11"; /** * OpenCV Library version 2.4.12. */ public static final String OPENCV_VERSION_2_4_12 = "2.4.12"; /** * OpenCV Library version 2.4.13. */ public static final String OPENCV_VERSION_2_4_13 = "2.4.13"; /** * OpenCV Library version 3.0.0. */ public static final String OPENCV_VERSION_3_0_0 = "3.0.0"; /** * OpenCV Library version 3.1.0. */ public static final String OPENCV_VERSION_3_1_0 = "3.1.0"; /** * OpenCV Library version 3.2.0. */ public static final String OPENCV_VERSION_3_2_0 = "3.2.0"; ..... }

由於之前使用的OpenCV版本比較老,並且隨著手機配置的增強,處理器越來越牛逼,Android的版本也在不斷的更新,在配置過程中很多朋友留言說報出來各種亂七八糟的問題,不知道如何去處理,而且折騰了半天配置完還執行不起來,內心一萬頭草泥馬~,所以我抽時間又整理了下,示例這次上傳完整的,不管多大。

OpenCV介紹
OpenCV是一個基於BSD許可(開源)發行的跨平臺計算機視覺庫,可以執行在Linux、Windows、Android和Mac OS作業系統上。這裡你只需要知道它是一個視覺庫就可以了,更加詳細介紹可以去查閱相關資料。

在之前那篇文章的基礎上,我們就更換一下OpenCV的版本還有總結下之前問題的出現及解決方案。
我在下載了之前的舊版本示例後,嘗試將新的3.2版本的 native—>Libs—>每個目錄中的 libopencv_java3.so 複製到專案中時,很糟糕,出現瞭如下問題:

bug-1

程式閃退,我或許不該這麼幹,因為從2.4.9到3.2.0也許更新了太多的東西,他們庫裡的方法或許是不能相容的,這時,我還是乖乖按照 第一篇文章 中的方式將sdk —> java —> src下的程式碼Copy到專案中,OK,直接Run了一下看會不會成功,結果也很糟糕,報錯資訊如下:
bug-2

這次比上次要好有點,起碼它告訴我這條資訊:dlopen failed: “/data/app/org.opencv.engine-1/lib/arm/libopencv_java3.so” is 32-bit instead of 64-bit
而且在手機中執行程式的提示資訊:
bug-4

Google一番之後,發現問題和使用的targetSDKVersion版本有關,也就是手機系統的版本,5.0? 6.0?Ok,那這個問題就引刃而解了。錯誤解決方案:




也就是在Activity的onResume()方法中初始化OpenCV時,加入了一個判斷,OpenCVLoader.initDebug() 可以跟蹤進去看看程式碼。

demo

若需要 OpenCV Manager支援可以到APP應用市場下載,這裡我已經一併上傳至專案apk目錄下了,安裝後的介面:

OpenCV Manager

專案配置:

測試機360 N4
系統版本6.0
OpenCV版本3.2.0
targetSdkVersion 25