Android配置opencv,因为最近上课老师一直在讲解opencv的使用,以及opencv的在图像处理和图像加载方面的强势,让我对opencv有一种想要去了解的心情,记得在去年我在对某个项目进行图片编辑的时候接触到了opencv,当初是使用了c++对opencv的使用,使用了vs2017+windows+opencv进行配置,在c++中include opencv的库进行开发,本文讲解怎么在Androidstudio中进行配置opencv和opecv的简单运行。
首先要下载opencv 的Android源码:https://opencv.org/releases/
在官网中下载你需要的版本对应的opencv的文件:
我采用的是3.4.7的版本
话说如果直接的网络不太好的老哥可以试试用xshell 连接自己的服务器,然后用服务器wget下载后,再传入到自己的本机上,这样的速度会比自己的下载快得多,因为一般大公司的网络都优化过,下载速度也就会比我们自己下载要快得多。
把文件下载下来并解压,不需要新建文件夹进行解压,可以直接解压,解压后的文件是OpenCV-android-sdk
好了,废话不多说,文件下载完毕后,开始配置:
1.第一步
选择file->new->import module 导入刚刚解压的OpenCV-android-sdk,选择OpenCV-android-sdk\sdk\java,此时能够看到OpenCVLibrary340被导入进来,然后next->finish即可。导入后,我们的project目录下有一个OpenCVLibrary347的目录。
2.第二步
在project中去添加依赖,步骤如下:
选择opencv的资源包即可
3.第三步
把OpenCV-android-sdk\sdk\native\libs目录下的库复制到我们的project的app\libs目录下,具体如图所示:
这个目录下存放的是CPU架构相关的库,可以符合自己CPU架构的复制进去。我这里复制了armeabi和armeabi-v7a两个。(注:如果你是X86的架构就把x86的放进去,对应自己CPU架构。我模拟器设的X86,原来没放X86的导致没法在模拟器中安装apk)
4.第四步
还需要把opencv下面的build.gradle中的版本改为自己app中的build.gradl中的版本,版本一致
这两个版本必须要一致,不然无法加载成功opencv
5.第五步
最后一步,就是在app的build.gradle中加入刚刚复制后的库,即把下面的代码添加到gradle.build文件里就可以了:
sourceSets {
main {
jni.srcDirs = []
jniLibs.srcDirs = ['libs']
}
}
然后加入后 对所有的gradle 重新编译一下,基本上是没有任何问题的,那么opencv就这样配置好啦。
我们来试一下吧:
示例代码:
package com.example.opencv;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.Utils;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.imgproc.Imgproc;
public class MainActivity extends AppCompatActivity {
static {
if(!OpenCVLoader.initDebug())
{
Log.d("opencv","初始化失败");
}
}
private ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView)findViewById(R.id.image);
Bitmap bitmap = BitmapFactory.decodeResource(this.getApplicationContext().getResources(), R.drawable.jjy1);
Mat src = new Mat();
Mat dst = new Mat();
Utils.bitmapToMat(bitmap, src);
//new Size(width, height)
Imgproc.resize(src, dst, new Size(400,600),0,0,Imgproc.INTER_AREA);
Bitmap bitmap1 = Bitmap.createBitmap(dst.cols(),dst.rows(),Bitmap.Config.RGB_565);
Utils.matToBitmap(dst, bitmap1);
imageView.setImageBitmap(bitmap1);
}
}
运行后的效果如下: