opencv4android開發記錄(1):opencv開發模板

         初次寫博客,介紹一下自己初次使用opencv4android的經歷,並將此作爲簡單模板,方便以後繼續學習,不用過多重寫界面之類,主要學習opencv處理圖像的算法。不用matlab或者c++學習圖像處理算法的原因其實很簡單,本人奇葩。 

         一、opencv4android下載 

        官網:opencv.org 

        下載:https://opencv.org/releases.html 找到Android Pack,下載,得當壓縮包,解壓。 

        二、配置 

        官網上講有如何配置,網上也有很多配置教程。不過本人比較奇葩,沒有按照這些方法配置,原因是之前學習安卓開發的方式奇葩。

        先說一下廢話,之前學習安卓開發的時候,沒有使用Eclipse,也沒有Android Studio,也不是用電腦,用的是aide,一個手機app,用於開發android,感興趣的同學可以百度或谷歌商店下載,需要破解版的去aide吧。 

         言歸正傳,針對aide的opencv4android沒有找到配置教程,自己根據之前的理解配置,完了居然可以完美運行。上面下載的壓縮包解壓之後有apk,samples和sdk三個文件夾,從命名應該可以看出是什麼了。 

         首先,新建一個項目,項目之下有src和bin等文件夾。然後要把opencv的相關文件放到指定位置,程序中纔可以調用opencv的函數。那這些函數在哪裏呢?回到上面提到的三個解壓之後的文件夾,可以猜測應該在sdk下,於是打開這個文件夾,下面有etc,java和native三個文件夾。由於我不用jni開發安卓,此處就先不管native了,但是後面會用到裏面的東西。而etc文件夾之下的文件並不懂。此處打開java文件夾,下面的文件夾是不是有點像一個安卓工程的文件夾?打開src文件夾,複製org文件夾到自己工程的src文件夾下,與com文件夾同級。複製gen下的org文件夾複製到自己工程的gen文件夾下。這樣,在java調用opencv的時候就不會有問題。但是,生成apk之後,運行會閃退,原因就是上面這些工作相當於加了頭文件說明函數,但是函數體沒有(此處純屬個人理解,如果錯誤,還望指正)。於是就想到上面提到的native,打開文件夾,發現一個libs文件,即庫文件,將其複製到項目下與src,res等文件夾同級。至此,文件方面配置完成。在用aide測試下可以正常運行,想想其原理,感覺在Eclipse下也應該可行,同樣的操作。

         總結一下文件配置,主要複製如下幾個文件夾:src下的org,gen下的org,native文件夾下的libs到相應位置即可。 

        三、使用 

        環境已經準備好,接下來就開始寫代碼了。可是沒思路呀,於是百度,加上samples文件夾下的代碼,大致可以得出,要使用opencv,第一要加載opencv庫,同時需要安裝一個opencv manager。但是我偏不想安裝,因爲如果寫出一個軟件,有人要用,總不可能叫他也裝一個吧,很麻煩。於是網上各種找解決方案,最終解決。以下將介紹如何使用。 

        private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { 

public void onManagerConnected(int status) { 

switch (status) { 

case LoaderCallbackInterface.SUCCESS: {

  Log.i(TAG, "OpenCV loaded successfully"); 

break; 

default: { 

super.onManagerConnected(status);

  }

  break;

  }

  }

  };

上面是加載opencv會調用的一個回調函數,如果成功就log,不成功就會執行default裏面的代碼,其實就是打開opencv manager,而我的目的是不打開,當然就想要status success了。在opencv加載的時候,可以看到onResume方法裏會這樣加載:

 if (!OpenCVLoader.initDebug()) {

  Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization"); 

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);

} else { 

Log.d(TAG, "OpenCV library found inside package. Using it!"); 

mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);

此處用到了前面的回調函數,如果initDebug失敗就要用manager,一般情況下就是直接用manager初始化,而我們之前已經把各種文件都配置好了,就不怕他初始化不正確,因此決定直接改爲: 

OpenCVLoader.initDebug(); 

Log.d(TAG, "OpenCV library found inside package. Using it!"); 

mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS); 

就是說直接返回成功,自然不用Manager了。至此,再也不用manager了。 接下來寫一個簡單程序,看一下是否可行吧。使用Imgproc.cvtColor,實現彩色圖變灰度圖,經本人驗證沒有問題。 

好了,關於opencv的配置已經講完,並且可以將彩色圖轉灰度圖程序作爲模板。如果對於本文講解還有不理解的地方,歡迎一起討論。文中可能存在一些概念或者說法錯誤,希望大家指出,一起學習。 

最後,提供關於本文的源代碼,歡迎大家下載,一起學習,配置還不太清楚的同學可以參考下工程文件結構。

       下載地址:https://github.com/kmin0579/OpenCVTemplate

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章