Android Studio配置和使用OpenCV3.x,不需要OpencvManager


轉載聲明,本文轉自CSDN:http://blog.csdn.net/qq_22033759/article/details/51156121

ps:本來在貼吧上有人問,想自己寫的,但時間有限,當初自己也是學習了這個CSDN博文后配置的,一為了收藏,二為了讓更多朋友搜索到,就轉載一下。。。

以下為轉載原文:

 

我所使用的opencv版本為3.1,Android Studio版本為2.0

先從opencv官網下載對應的版本的安卓的opencv的sdk 解壓出來路徑不要有中文

然后在Android Studio里創建一個安卓項目,在根目錄創建一個文件夾,命名為libraries
這里寫圖片描述
然后把sdk結業目錄下的 sdk\Java文件夾復制到libraries文件夾內,重命名為opencv
這里寫圖片描述
接着在該opencv目錄下創建一個build.gradle,內容為

apply plugin: 'com.android.library'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.0.0'
    }
}

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 23
        versionCode 2480
        versionName "3.1.0"
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            aidl.srcDirs = ['src']
        }
    }
}

 

 

需要依照需求修改對應的sdk版本

然后在修改下項目的settings.gradle ,添加一行

include ':libraries:opencv'

要選擇Sync Now

然后右鍵項目名,選擇Open Module Settings,選擇app然后點Dependencies,再點擊加號,選第三個,把opencv添加進去
添加好后如圖:
這里寫圖片描述

接着在/app/src/main/下創建一個文件夾叫jniLibs
這里寫圖片描述
把上圖目錄下的所有文件夾都復制到jniLibs中去。
到這就算是配置完全了。
接下來就是使用。

一定要先添加static{ System.loadLibrary(“opencv_java3”); }

我測試的代碼:(界面有一個ImageView和一個Button)

package com.example.chengk.opencvexamples;

import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.imgproc.Imgproc;

public class MainActivity extends AppCompatActivity {
    static{ System.loadLibrary("opencv_java3"); }
    int i=0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImageView imageView = (ImageView)findViewById(R.id.imageView);
        final Bitmap bitmap = ((BitmapDrawable) getResources().getDrawable(R.drawable.aa1)).getBitmap();
        imageView.setImageBitmap(bitmap);


        final Button button2 = (Button)findViewById(R.id.button);
        button2.setText("轉換");
        button2.setOnClickListener(new Button.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                i++;
                Mat rgbMat = new Mat();
                Mat grayMat = new Mat();
                //獲取lena彩色圖像所對應的像素數據
                Utils.bitmapToMat(bitmap, rgbMat);
                //將彩色圖像數據轉換為灰度圖像數據並存儲到grayMat中
                Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY);
                //創建一個灰度圖像
                 Bitmap grayBmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.RGB_565);
                //將矩陣grayMat轉換為灰度圖像
                Utils.matToBitmap(grayMat, grayBmp);
                ImageView imageView = (ImageView)findViewById(R.id.imageView);
                if(i%2==1)
                    imageView.setImageBitmap(grayBmp);
                else
                    imageView.setImageBitmap(bitmap);
            }

        });
    }
}

 

運行效果圖:
點擊按鈕前
這里寫圖片描述
點擊按鈕后
這里寫圖片描述

這么做確實是可行的,但空間占用太大,我這個程序占用空間將近50M,還在尋找其他更好的辦法,找到了繼續更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM