日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

OpenCV2.4.9 For Android + Android Studio (with gradle)配置教程

發布時間:2025/7/25 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV2.4.9 For Android + Android Studio (with gradle)配置教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
OpenCV2.4.9 For Android + Android Studio (with gradle)配置教程 10 回復 / 9501 瀏覽 本頁底部本帖地址
4king2 年前 - 2014-12-22 18:05 /0 好久沒來科創了,現在荒涼好多啊- -。 發一篇教程提高下訪問~
原文在我博客

OpenCV的配置一直是個最麻煩的問題,2.4.6以后windows環境下 vs配置我就出錯好幾十次,來來回回弄了好多遍
之前在實驗室弄,為了配合其他人才用的vs2010,現在蹲宿舍干了,改用更簡潔的Qt了,qt配置OPENCV方便很多,幾句話就搞定了。

人機交互的作業是寫一個以圖搜圖的demo,之前雖然在實驗室干過類似的東西,但是現在又得用安卓配置OpenCV了,又是麻煩了我一整天。前幾天終于成了,記錄一下。

配置環境的過程參考了http://stackoverflow.com/questions/17767557/how-to-use-opencv-in-android-studio-using-gradle-build-tool
demo的編寫參考了 http://blog.csdn.net/yanzi1225627/article/details/16917961
由于其resume后圖片會消失,我做了點改動

1.準備工作

首先安裝好Android Studio,要自帶所有開發套件的,感覺AS比Intellij+ ADT ,eclipse系列都要好,雖然也想過Qt開發安卓,但是太小眾了,不好跟人交流。
然后,保證所有環境變量配置正確,比如 JDK ADT JRE等等等等。

下載 OpenCV Android SDK ,我下的2.4.9,鑒于目前3。0無安卓sdk,2.4.10我也不敢用了,并將下載的OpenCV-2.4.9-android-sdk中的sdk文件夾中的java文件夾 重命名為 opencv


2.創建你的安卓項目(使用gradle,非gradle的教程網上資料很多)在你的工程根目錄下new一個文件夾,名字任意比如libraries ,將剛才的opencv文件夾整個復制到新建的libraries里面。


3. 在android studio中,在opencv的根目錄處新建一個 build.gradle文件,復制以下代碼

apply plugin: 'android-library'??buildscript {??repositories {??mavenCentral()??}??dependencies {??classpath 'com.android.tools.build:gradle:1.0.0'??}?? }??android {??compileSdkVersion 21??buildToolsVersion "21.1.2"??defaultConfig {??minSdkVersion 13??targetSdkVersion 21??versionCode 2490??versionName "2.4.9"??}??sourceSets {??main {??manifest.srcFile 'AndroidManifest.xml'??java.srcDirs = ['src']??resources.srcDirs = ['src']??res.srcDirs = ['res']??aidl.srcDirs = ['src']??}??}?? }

注意其中的versionName 改為你自己下載的OpenCV的版本號,compileSdkVersion和minSdkVersion和targetSdkVersion要和你..\工程名\app\目錄下的build.gradle中的設置一樣


????dependencies {??
????????classpath 'com.android.tools.build:gradle:1.0.0'
中的gradle版本要和你工程根目錄下的build.gradle(不是app下的)中的版本一樣,

關于gradle文件的解釋如下
http://www.cnblogs.com/youxilua/archive/2013/05/20/3087935.html




4.在工程根目錄的 settings.gradle 中添加以下代碼,改動之后會提示你需要sync,點sync now


include ':libraries:opencv'??

5.在你需要用到opencv的model的/src/main文件夾下新建一個jniLibs文件夾。將剛才下載的OpenCV-2.4.9-android-sdk/sdk/native/libs中的文件拷貝進來。 就是各種.so .a文件,相當于win下的dll文件,程序靠引用這些動態鏈接庫工作。另外一點就是,libs下的文件夾不一定要全部復制,根據你運行的平臺復制對應的文件夾即可,對應關系如圖,也跟之后的OpenCV Manager有關 (版本號自行對應)



6.在剛才..工程名\app\ 目錄下的build.gradle 中的dependency下添加以下代碼


compile project(':libraries:opencv')????

該sync now的都sync 就可以開始編寫你的程序了

7.灰度化demo

首先看下opencv官網的流程圖http://docs.opencv.org/platforms/android/service/doc/UseCases.html



從2.4之后,為了和Android的系統架構保持同步,準確說是吸收Android框架層的優點,引入了OpenCV Manager的概念,其本質就是一個Service,用來管理OpenCV動態鏈接庫(即你之前拷貝的那個jniLibs里的東西)。

APP在運行時會首先檢查OpenCV Manager存在不,如果不存在則會提示安裝。如果存在,就會連接這個服務,進一步初始化加載OpenCV庫。??所以第一步就是先在你的目標手機上安裝 OpenCV Manager ,apk在 ..\OpenCV-2.4.9-android-sdk\apk 下版本對應之前的圖。

具體的代碼跟http://blog.csdn.net/yanzi1225627/article/details/16917961 沒什么不同,這里只提兩點。


public class MyActivity extends Activity implements HelperCallbackInterface { private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {@Overridepublic void onManagerConnected(int status) {switch (status) {case LoaderCallbackInterface.SUCCESS:{Log.i(TAG, "OpenCV loaded successfully");// Create and set ViewmView = new puzzle15View(mAppContext);setContentView(mView);} break;default:{super.onManagerConnected(status);} break;}} };/** Call on every application resume **/ @Override protected void onResume() {Log.i(TAG, "Called onResume");super.onResume();Log.i(TAG, "Trying to load OpenCV library");if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mOpenCVCallBack)){Log.e(TAG, "Cannot connect to OpenCV Manager");} }

以上截取官方文檔http://docs.opencv.org/platforms/android/service/doc/BaseLoaderCallback.html

任何opencv項目都需要這兩個步驟,在initAsync 加載OpenCV Library 所有其他的操作必須在這一步成功之后才能執行。

我最后的程序被ADT自帶的虛擬機坑了好久,再次告誡各位不要用AVD,只要不用AVD應該都會成功~



附demo代碼:
package com.example.ras.myapplication;import org.opencv.android.BaseLoaderCallback; import org.opencv.android.OpenCVLoader; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.imgproc.Imgproc;import android.support.v7.app.ActionBarActivity; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.Button; import android.widget.TextView;public class MainActivity extends ActionBarActivity {Button btnProcess;Bitmap srcBitmap;Bitmap grayBitmap;Bitmap MaskBitmap;ImageView imgLena;TextView OpCVversion;private static final String TAG = "MainActivity";private static boolean flag = true;private static boolean isFirst = true;??????????????????????// Greyprivate BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {@Overridepublic void onManagerConnected(int status) {// TODO Auto-generated method stubswitch (status) {case BaseLoaderCallback.SUCCESS:Log.i(TAG, "Load success");break;default:super.onManagerConnected(status);Log.i(TAG, "Load fail");break;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initUI();btnProcess.setOnClickListener(new ProcessClickListener());}public void initUI(){btnProcess = (Button)findViewById(R.id.button);imgLena = (ImageView)findViewById(R.id.imageView);OpCVversion = (TextView)findViewById(R.id.textView3);OpCVversion.setText("Ver: " + OpenCVLoader.OPENCV_VERSION_2_4_9);Log.i(TAG, "initUI sucess...");}public void procSrc2Gray(){Mat rgbMat = new Mat();Mat grayMat = new Mat();srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.lena);grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), 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 grayMatUtils.matToBitmap(grayMat, grayBitmap); //convert mat to bitmapLog.i(TAG, "procSrc2Gray sucess...");}private class ProcessClickListener implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(isFirst){procSrc2Gray();isFirst = false;}if(flag){imgLena.setImageBitmap(grayBitmap);btnProcess.setText("Origin");flag = false;}else{imgLena.setImageBitmap(srcBitmap);btnProcess.setText("Grey");flag = true;}}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.menu_main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();//noinspection SimplifiableIfStatementif (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();//load OpenCV engine and init OpenCV libraryisFirst = true;OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);Log.i(TAG, "onResume sucess load OpenCV...");} }

[修改于 2 年前 - 2014-12-22 20:17:17]


12112 年前 - 2014-12-22 18:33 /1 請編輯帖子把圖片上傳一下,感謝哦~~
4king2 年前 - 2014-12-22 18:37 /2 引用 1211:
請編輯帖子把圖片上傳一下,感謝哦~~ 哦,沒注意防盜鏈- -
darkorochi2 年前 - 2014-12-22 19:57 /3 都2.4.9了啊。。。。。
4king2 年前 - 2014-12-22 20:07 /4 引用 darkorochi:
都2.4.9了啊。。。。。 最新的3.0.0beta
11767641772 年前 - 2014-12-22 22:09 /5 這就是傳說中的安卓開發環境搭建?

我查的方法得在谷歌下一堆東西必須翻墻。
咋辦。。
ide用啥好用捏
c艸作為編程語言如何??
金星凌日2 年前 - 2014-12-22 22:20 /6 引用 1176764177:
這就是傳說中的安卓開發環境搭建?

我查的方法得在谷歌下一堆東西必須翻墻。
咋辦。。
ide用啥好用捏
c艸作為編程語言如何?? Android應用一般用Java開發,不過C++也可以用。
4king2 年前 - 2014-12-22 23:42 /7 引用 1176764177:
這就是傳說中的安卓開發環境搭建?

我查的方法得在谷歌下一堆東西必須翻墻。
咋辦。。
ide用啥好用捏
c艸作為編程語言如何?? IDE可以Android Studio畢竟是谷歌官方的,也可以Intellij + ADT 也可以eclipse + ADT
也可以NDT + 別的東西
張靜茹2 年前 - 2014-12-23 14:25 /8 引用 4king:
IDE可以Android Studio畢竟是谷歌官方的,也可以Intellij + ADT 也可以eclipse + ADT
也可以NDT + 別的東西 visual stodio好像也能開發安卓了,樓主可以試試呀
11767641772 年前 - 2014-12-23 16:43 /9 引用 張靜茹:
visual stodio好像也能開發安卓了,樓主可以試試呀 好像是英文的不知道安裝在中文的vs13下會咋樣
4king2 年前 - 2014-12-25 17:04 /10 引用 張靜茹:
visual stodio好像也能開發安卓了,樓主可以試試呀 這不是科創女神嗎,我是微軟黑, VS不考慮

總結

以上是生活随笔為你收集整理的OpenCV2.4.9 For Android + Android Studio (with gradle)配置教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。