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,内容为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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 ,添加一行
1 | include ':libraries:opencv' |
要选择Sync Now
然后右键项目名,选择Open Module Settings,选择app然后点Dependencies,再点击加号,选第三个,把opencv添加进去
添加好后如图:
接着在/app/src/main/下创建一个文件夹叫jniLibs
把上图目录下的所有文件夹都复制到jniLibs中去。
到这就算是配置完全了。
接下来就是使用。
一定要先添加static{ System.loadLibrary(“opencv_java3”); }
我测试的代码:(界面有一个ImageView和一个Button)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 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,还在寻找其他更好的办法,找到了继续更新。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用
2008-11-24 ADOBE CS3 序列号
2007-11-24 音乐欣赏之歌词-《爱情漫游》