轉載聲明,本文轉自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,還在尋找其他更好的辦法,找到了繼續更新。
