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