1. 程式人生 > >OpenCV For Android

OpenCV For Android

OpenCV之Android開發

本人第一次接觸OpenCV是在2014年11月份,當時因公司專案需要,開始學習OpenCV。當時記得公司要做一個識別類的專案,由於本人之前並沒有相關經驗,無從下手,因此那段時間煩擾了度娘和股溝不少。之後下載了一個相關的APP,好像是介紹物件的老大做的教育的專案,叫梯子網。只不過這媒婆感覺就適合做相親介紹物件的東西,所以過了不久,這個被給予厚望的網站,跪了。但是她做的專案確實不錯,可能是時間不對吧。默哀。。。

扯遠了,O(∩_∩)O哈哈~
話說當時下載了這個叫梯子打分的APP,然後用了一下還不錯,原理都是相通的,但是還是無處下手,因此突然想起了大學時候,老師傳授的一門絕世武功——反編譯。通過反編譯,看到了他的類庫libs包下的東西,什麼


libopencv_java.so

然後複製貼上,問度娘這是啥東東,度娘不負所托,然後就繼續找到了OpenCV,這就開始接觸了。

距離那個專案完成快兩年了,現在又要重新拾起,由於當時的學習資料都已丟失,不得不重新再來,又研究了一遍,發現以前不怎麼懂的東西,現在通過看原始碼,有點懂了,特此記錄一下,方便以後使用。

環境配置

本人當前系統為window7,所以會根據window7作業系統來進行環境配置

Android 開發環境配置

有關Android開發環境配置的一搜一大把,不懂的可以問度娘或者股溝啊

無非就包括以下三個方面的準備:

  • JDK

JDK本人使用的是1.7版本,建議使用1.7,因為新的OpenCV sdk對於JDK有要求,環境配置就不說了

  • NDK

NDK 安裝好之後,配置一下環境變數,因為NDK編譯需要

  • IDE

IDE關於Android開發的主要有兩種:

- 第一個,就是Android Studio

Android studio 是Android官方推薦使用的IDE工具,功能更加適合Android開發者使用,而且Android官網以後不再提供Eclipse ADT外掛的更新,所以建議使用Android Studio來進行專案操作

- 第二個,是Eclipse

Eclispe的強大功能就不說了

本文將對於以上兩種IDE工具展開說明。

當以上環境配置好之後,現在就是OpenCV的使用了

OpenCV使用

  • 首先,去OpenCV官網去下載的sdk

OpenCV下載地址,本人下載的是3.0版本

這裡寫圖片描述

  • 解壓
  • 匯入相關包

Eclipse匯入

  • 首先,匯入包

可以選擇一般工程匯入也可以選擇Android工程匯入,建議選擇一般工程匯入,因為這樣可以配置成自己的SDK版本,比較方便

這裡寫圖片描述

這裡寫圖片描述

  • 其次,看到一些匯入錯誤

這裡寫圖片描述

  • 糾正錯誤

如下面圖的步驟

這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

OK,通過這樣一步步的配置除了使用NDK的專案都可以運行了,NDK專案的配置,參見我的另一篇部落格

OpenCV 初始化機制

通過程式碼介紹一下,它的初始化機制


@Override
    public void onResume()
    {
        super.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);
        }
    }

通過呼叫OpenCVLoader.initDebug()來進行初始化,如果初始化不成功就會呼叫

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

如果成功,就會呼叫回撥函式

mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);

OpenCV Manager載入機制

如何不使用OpenCV Manager