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

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

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

如下爲轉載原文:markdown

 

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

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

而後在Android Studio裏建立一個安卓項目,在根目錄建立一個文件夾,命名爲libraries
這裏寫圖片描述
而後把sdk結業目錄下的 sdk\Java文件夾複製到libraries文件夾內,重命名爲opencv
這裏寫圖片描述
接着在該opencv目錄下建立一個build.gradle,內容爲ide

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 Nowgradle

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

接着在/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,還在尋找其餘更好的辦法,找到了繼續更新。

相關文章
相關標籤/搜索