1. 程式人生 > >Android Studio中配置及使用OpenCV示例(一)

Android Studio中配置及使用OpenCV示例(一)

Android Studio配置及使用OpenCV

前言:最近在做專案移植,專案較大,在Eclipse中配置的Jni及OpenCV環境沒任何問題,但是遷移到Studio中就問題一大堆,網上也找了一些資料參考及學習,很感謝前人留下的總結及經驗。關於在AS中使用jni及配置OpenCV也研究了一段時間,怕日後忘記便在此記錄下,另一方面也可以給一些新手提供捷徑,少走些彎路。

1、下載及目錄介紹

進入官網(http://opencv.org/)下載OpenCV4Android並解壓(這裡是OpenCV-2.4.9-android-sdk)。下面是目錄的結構圖:

sdk 目錄即是我們開發opencv所需要的類庫;

samples 

目錄中存放著若干opencv應用示例(包括人臉檢測等),可為我們進行android下的opencv開發提供參考;

doc 目錄為opencv類庫的使用說明及api文件等;

apk 目錄則存放著對應於各核心版本的OpenCV應用安裝包,如下圖;


(用來管理手機裝置中的opencv類庫,在執行opencv應用之前,必須確保手機中已經安裝了OpenCV_2.4.3.2_Manager_2.4_*.apk,否則opencv應用將會因為無法載入opencv類庫而無法執行)

2、將OpenCV引入Android Studio

這裡需要注意一點,你可以直接在Android Studio中選擇 File-->Import Module,找到OpenCV解壓的路徑,選擇

sdk/java資料夾作為Module進行匯入。但便於維護,此處本人的建議是,找到sdk下java目錄,將其拷貝到你的StudioProject專案目錄下,在進行引入。


3、更新build.gradle資訊

匯入後會因為Gradle中的配置問題出現錯誤,在Studio中的左上角選擇Project檢視,在引入的OpenCVLibrary資料夾下,開啟build.gradle(注意是引入的openCVLibrary249下),修改檔案中以下資訊:

1)compileSdkVersion

2)buildToolsVersion

3)minSdkVersion

4)targetSdkVersion(將其內容與app資料夾下的build.gradle中資訊相一致

如下圖所示:



然後點選Gradle進行同步(Sync Gradle)。

4、新增Module Dependency

選擇File --->Project Structure,在app module的Dependencies一欄中,點選右上角的綠色加號,將openCVLibrary新增進去,點選確定。


5、複製libs資料夾到專案中

在OpenCV的解壓包中,將sdk-->native-->libs資料夾複製,貼上在Project檢視下app-->src-->main目錄下,並將其重新命名為jniLibs

 

6、示例演示

OK!先看看OpenCVActivity中是如何寫的:

public class OpenCVActivity extends Activity{

    private Button btn;
    private ImageView img;

    private Bitmap srcBitmap;
    private Bitmap grayBitmap;
    private static boolean flag = true;
    private static boolean isFirst = true;
    private static final String TAG = "gao_chun";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_opencv);

        img = (ImageView)findViewById(R.id.img);
        btn = (Button)findViewById(R.id.btn);
        btn.setOnClickListener(new ProcessClickListener());
    }


    @Override
    protected void onResume() {
        super.onResume();
        //load OpenCV engine and init OpenCV library
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, getApplicationContext(), mLoaderCallback);
        Log.i(TAG, "onResume sucess load OpenCV...");
    }


    //OpenCV庫載入並初始化成功後的回撥函式
    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {

        @Override
        public void onManagerConnected(int status) {
            // TODO Auto-generated method stub
            switch (status){
                case BaseLoaderCallback.SUCCESS:
                    Log.i(TAG, "成功載入");
                    break;
                default:
                    super.onManagerConnected(status);
                    Log.i(TAG, "載入失敗");
                    break;
            }
        }
    };



    public void procSrc2Gray(){
        Mat rgbMat = new Mat();
        Mat grayMat = new Mat();
        srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.genie);
        grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.RGB_565);
        Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B.
        Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);//rgbMat to gray grayMat
        Utils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmap
        Log.i(TAG, "procSrc2Gray sucess...");
    }


    public class ProcessClickListener implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(isFirst){
                procSrc2Gray();
                isFirst = false;
            }
            if(flag){
                img.setImageBitmap(grayBitmap);
                btn.setText("檢視原圖");
                flag = false;
            }else{
                img.setImageBitmap(srcBitmap);
                btn.setText("灰度化");
                flag = true;
            }
        }
    }

}

再來看看簡單的佈局介面 activity_opencv.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="OpenCV"/>

    <ImageView
        android:id="@+id/img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/genie"/>

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/img"
        android:layout_centerHorizontal="true"
        android:text="灰度化"/>"

</RelativeLayout>
執行後的效果圖:

   

按照步驟來,基本沒多大問題,想了想Demo還是上傳供大家參考吧,不過由於拷出來後發現整個包有220多M過於恐怖,索性就刪掉了一些東西,將app目錄下的build目錄下內容刪除,將src ---> main ---> jniLibs 下的.so庫刪除了,注意:若下載demo執行,需要在OpenCV的解壓包目錄下,將sdk-->native-->libs資料夾下的四個目錄複製到專案的jniLibs目錄下便可。

【轉載註明gao_chun的Blog:http://blog.csdn.net/gao_chun/article/details/49359535】

相關推薦

Android Studio配置使用OpenCV示例

Android Studio配置及使用OpenCV前言:最近在做專案移植,專案較大,在Eclipse中配置的Jni及OpenCV環境沒任何問題,但是遷移到Studio中就問題一大堆,網上也找了一些資料參考及學習,很感謝前人留下的總結及經驗。關於在AS中使用jni及配置Open

ANDROID專案嵌入高德地圖配置環境+顯示地圖

最近在做專案中嵌入高德地圖的工作,覺得有必要記錄一下嵌入過程,雖然高德官方給說明文件了,但有寫並不明確需要去查類,查資料,再此把過程記錄一下。 一、顯示地圖 1.配置AndroidManifest.xml檔案 可能需要如下許可權: <!--允許程式開啟網路套接字-

影象處理基礎OpenCV實現

最近學習數字影象處理基礎及OpenCV實現這本書,寫一點東西記錄所學的內容。。 一、 開啟影象與視訊 開啟影象 用到了OpenCV中的結構體IplImage, 函式IplImage* cvLoadImage( const char* filename, int

dagger2的配置基本使用

一、配置: 1.1 在Project的gradle指令碼中配置 dependencies { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' }

c#配置檔案的使用

     在使用log4net的時候,需要自己來配置相關的檔案,之前雖然研究過如何來使用配置檔案,但是時間一久還是有點生疏,下面自己做的一些小test,也讓自己能夠有比較深的印象,在學習過程中,也在網上看到了一位大神寫的相關的內容,比較詳細,這是大神部落格關於配置檔案的地址

Android Studio配置AndroidAnnotations,遇到的問題解決方法

        搞安卓開發以來,一直使用的Eclipse,Google出了AndroidStudio(簡稱AS)以後,一直忙於專案沒有時間試試,今天裝了一個適應一下,然後想在裡面用上AndroidAnnotions(簡稱AA)(一個挺不錯的開源框架,用起來特別方便,如果你現

android studio配置X5 webview時的一個坑

這也 default ips build 找到 沒有 androi lte sed 在接入X5的第二步中,需要配置so文件,這裏說一下遇到的坑 1. 需要把demo下載回來,不然你找不到so文件,找到so文件後放到自己相對應的目錄下邊,自己裏面那個目錄也沒有,所以和文件夾一

Android Studio配置GitHub

準備: 1、你要註冊了GitHub,確保你有了GitHub賬號。 2、下載GitHub客戶端,安裝客戶端。(下載客戶端安裝客戶端我上篇文章已經講過了這裡就不贅述了)。如果不瞭解請移步至 3、設定GitHub賬號密碼:開啟Android Studio 找到File -

Android studio在用opencv時不使用opencv manager

       週末一時興起打算用opencv開發一個在安卓平板上的跑的影象處理程式,前期寫程式碼都很順利,編譯成功後安裝,一執行就彈出讓安裝opencv manager,安裝後執行,竟然提示OpenCV was not initialised correctly. Appli

修改android studio的avd sdk路徑前提是已經下載好了avd sdk-----用eclipse的福音

很多人都遇到安裝android studio之後需要下載gradle和重新下載avd sdk的問題 首先,設定環境變數,ANDROID_SDK_HOME值為sdk所在目錄,GRADLE_HOME值為gradle所在目錄,在path中新增%ANDROID_SDK_HOME%\

Android studio 配置Gradle 根據不同引數打包,並在程式碼使用

筆記 使用案例 app/gradle 配置 我們在 thinker中不難看出 他們也是使用了這個方式 android { defaultConfig {

Android Studio配置so檔案的方法

    最近要在專案中加入百度地圖api的支援。剛開始的時候總是出現     Error inflating class com.baidu.mapapi.map.MapView這個錯誤,對照百度地圖給的demo之後發現是沒有在自己繼承的Application類裡面加入S

經驗總結-完整介紹Android StudioGit的使用之Android Studio上傳專案至GitHub

現在我們開始吧,說明一下,下面的內容中,都是Git部落格系列的,雖然專案名和和之前不同,但它們都是銜接關係,如果你沒有銜接好,請建立一個專案自行完成銜接。 一、首先再次確定你自己的專案建立了Git

android studio 環境配置使用時遇到的問題

問題 發現 解決 應該 解決方法 ... 步驟 文件刪除 無法 1 安裝好java等,安裝好android studio後,第一次運行android studio, 顯示找不到sdk。 解決方法: 點擊cancel取消,繼續後面的步驟,一直next就好。 2 第一次構建項目

Android Studio使用AIDL簡單示例

這兩天在學習aidl跨程序呼叫,研究了一天終於寫出了個helloword。。做下記錄吧。 根據官方提供的指南,開發aidl跨程序呼叫,主要分以下步驟: 1.建立.aidl檔案-該檔案(YourInterface.aidl)定義了客戶端可用的方法和資料的介面。 2.在make

項目遇到的某些問題解決辦法

sql () 輸入 包含 查看 定位 管理器 顯示 分布式開發 簡介 該博文記錄了一些平時在工作中遇到的問題及解決辦法,某些問題有解決辦法,某些問題暫時沒有解決辦法,如果有大神知道的,請多多指點。 如果某些問題有更好的解決辦法,也請指教。 正文 1、在一個方

Android關於JNI 的學習對於JNIEnv的一些認識

else size 初步 jint 使用 包括 pri jnienv 就會 一個簡單的樣例讓我們初步地了解JNI的作用,可是關於JNI中的一些概念還是須要了解清楚,才可以更好的去利用它來實現我們想要做的事情。 那麽C++和Java之間的是怎樣通過JNI來進行互相調用的呢

tomcatserver.xml配置詳解(轉載)

重要 lis 結構 更多 tle 處理請求 服務器端 sta 設置 轉載自:https://www.cnblogs.com/starhu/p/5599773.html tomcat中server.xml配置詳解 Tomcat Server的結構圖如下:(該文件描述了如何

專案常用的讀取配置檔案的方式

package com.bjpowernode.demo01; import java.util.ResourceBundle; /** ResourceBundle讀取配置檔案 @author Administrator */ public clas

Spring Cloud:配置中心git示例06

隨著線上專案變的日益龐大,每個專案都散落著各種配置檔案,如果採用分散式的開發模式,需要的配置檔案隨著服務增加而不斷增多。某一個基礎服務資訊變更,都會引起一系列的更新和重啟,運維苦不堪言也容易出錯。配置中心便是解決此類問題的靈丹妙藥。 市面上開源的配置中心有很多,BAT每家都出過,360的QCon