OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类,同时提供了Python、Ruby、MATLAB等语言的接口,实现了和计算机视觉方面的很多通用算法百度百科 词条:opencv
我用到东西如下:
sdk 我们开发所用的一些工具
注意:我在学习的过程,直接在手机安装会报解析安装包错误,以至于无法安装,那么这里需要连接开发者模式,使用adb进行安装,命令: adb install ****.apk 就可以安装成功了。
导入Module 这个东西就是上图中的java文件夹,选择File--> new --> import Module 选择步骤一图中红色框框圈起来的JAVA文件夹即可,然后在文件栏中就可以看到这个新的Module了,后面的320指的是版本号,每个人可能不一样
导入Module之后我们需要配置一下,在File--->Project Structure菜单中选择该Moudle作为库依赖即可,如下操作
注意:在某些情况下,再倒入Module的情况下,会出现报错的情况,这是修改Module的编译版本和目标版本和APP的保持一致,然后重新Sync即可.
在项目中,选app工程,在src/main目录下新建jniLibs文件夹,将上面选中的文件全部复制到其中。
为了确保工程创建成功,我们可以重新reBuild一下工程
@Override protected void onResume() { super.onResume(); //载入OpenCv初始化引擎,并载入库,可以看到initAsync,使用的是异步加载 //因此需要提供回调函数 //OpenCVLoader.OPENCV_VERSION_3_2_0指的是版本号,请根据你自己的版本选择 OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_2_0, getApplicationContext(), mLoaderCallback); } //OpenCV库加载并初始化成功后的回调函数 private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { // TODO Auto-generated method stub switch (status) { case BaseLoaderCallback.SUCCESS: Log.e("OpenCv", "成功加载"); break; default: super.onManagerConnected(status); Log.e("OpenCv", "加载失败"); break; } } };
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/img" android:layout_width="600px" android:layout_height="1000px" android:layout_centerHorizontal="true" /> </RelativeLayout>
Mat rgbMat = new Mat(); Mat grayMat = new Mat(); //从资源中获取图片 srcBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.psb); //构建灰度RGB图片 grayBitmap = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(), Bitmap.Config.RGB_565); //将资源图片转化为Mat类资源 Utils.bitmapToMat(srcBitmap, rgbMat);//convert original bitmap to Mat, R G B. //将图片灰度化 Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY); //将灰度Mat转换为灰度BitMap资源 Utils.matToBitmap(grayMat, grayBitmap); //设置显示 ((ImageView)findviewById(R.id.img)).setImageBitmap(binaryBitmap);
当然还有更多的使用方法没有再此详细阐述,可以再网上寻找一些资源,Mat是非常强大的一个类,好好玩吧。