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 複製到專案中時,很糟糕,出現瞭如下問題:
程式閃退,我或許不該這麼幹,因為從2.4.9到3.2.0也許更新了太多的東西,他們庫裡的方法或許是不能相容的,這時,我還是乖乖按照 第一篇文章 中的方式將sdk —> java —> src下的程式碼Copy到專案中,OK,直接Run了一下看會不會成功,結果也很糟糕,報錯資訊如下:
這次比上次要好有點,起碼它告訴我這條資訊:dlopen failed: “/data/app/org.opencv.engine-1/lib/arm/libopencv_java3.so” is 32-bit instead of 64-bit
而且在手機中執行程式的提示資訊:
Google一番之後,發現問題和使用的targetSDKVersion版本有關,也就是手機系統的版本,5.0? 6.0?Ok,那這個問題就引刃而解了。錯誤解決方案:
也就是在Activity的onResume()方法中初始化OpenCV時,加入了一個判斷,OpenCVLoader.initDebug() 可以跟蹤進去看看程式碼。
若需要 OpenCV Manager支援可以到APP應用市場下載,這裡我已經一併上傳至專案apk目錄下了,安裝後的介面:
專案配置:
測試機360 N4
系統版本6.0
OpenCV版本3.2.0
targetSdkVersion 25