1. 程式人生 > >Android&OpenCv之Android程式載入OpenCv庫(二)

Android&OpenCv之Android程式載入OpenCv庫(二)

好的開始是成功的一半,在第一節中我總結了如何在Eclipse中建立開發帶有OpenCv庫的Android APP的環境的工作。

本節講如何在Android程式中載入OpenCv庫,以便後續開發工作中呼叫OpenCv提供的API的介面。

我們知道OpenCv庫作為一個.so的庫。在Android程式中我們一般是通過System.LoadLibrary(“xxx.so”)來載入.so庫的。所以載入OpenCv的庫也不例外。在Android程式有兩種方式載入OpenCv庫,一種是直接載入(做除錯同),一種在通過OpenCv Manager提供的服務找到OpenCv庫的位置後再載入的,本質是一樣的。下面我們來看第二種方式是怎樣實現的?根據官方的思路,OpenCv Manager其實提供的是服務。我們通過aidl程式語言暴露服務的介面給client。在D:\work\OpenCv4Android\OpenCV-2.4.11-android-sdk\OpenCV-android-sdk\sdk\java\src\org\opencv\engine\OpenCVEngineInterface.aidl中提供了這樣的介面,其內容如下。

package org.opencv.engine;
/**
* Class provides a Java interface for OpenCV Engine Service. It's synchronous with native OpenCVEngine class.
*/
interface OpenCVEngineInterface
{
    /**
    * @return Returns service version.
    */
    int getEngineVersion();


    /**
    * Finds an installed OpenCV library.
    * @param OpenCV version.
    * @return Returns path to OpenCV native libs or an empty string if OpenCV can not be found.
    */
    String getLibPathByVersion(String version);


    /**
    * Tries to install defined version of OpenCV from Google Play Market.
    * @param OpenCV version.
    * @return Returns true if installation was successful or OpenCV package has been already installed.
    */
    boolean installVersion(String version);


    /**
    * Returns list of libraries in loading order, separated by semicolon.
    * @param OpenCV version.
    * @return Returns names of OpenCV libraries, separated by semicolon.
    */
    String getLibraryList(String version);
}

在(一)中我們已經詳細講了載入的流程圖。