Android Studio + Opencv 配置教程
Android Studio + Opencv
晚上能找到很多Eclipse + Opencv的教程,可是对于Android Studio + Opencv的资料却比较少,而且写的都比较简单,为了让新人少一点掉到坑里,特意整理一下AS+opencv的方法哈
配置教程
- 下载Opencv的android版本SDK:opencv官网
- 新建一个工程起名为TestOpenCV
- 导入OpenCV的工程:点击File->New->Import Module,然后把要导入的opencv路径设为下载的OpenCV-android-sdk/sdk/java的路径,点击确定。
在你左边的Project试图页面,可以看到新添加了一个OpenCVlibrary2411的文件夹(具体数字会根据你的opencv sdk版本而定)。
修改OpenCVlibrary2411目录下的那个build.gradle文件,主要改这其中4项:android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { minSdkVersion 15 targetSdkVersion 22 } buildTypes { ...... } }
其中的compileSdkVersion,buildToolsVersion,minSdkVersion,targetSdkVersion四项可以参考app/build.gradle设为一模一样的
- 在左边的project视图里面右键点击Open Modeule Setting,然后点击Dependencies标签页,点击右上角的+号图标,选择Module dependency,选择openCVLibrary2411
- 将下载的opencv SDK库里面的OpenCV-android-sdk/sdk/native下面的libs文件夹拷贝到TestOpenCV/app/src/main下面,并将这个libs文件夹改名为jniLibs
到这里所有OpenCV的配置就完成了!接下来是用OpenCV的示例代码。
android studio + opencv示例代码
还是接上面的工程
修改app/src/res/layout/activity_main.xml的布局文件
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:layout_centerVertical="true" android:layout_centerHorizontal="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="test" android:id="@+id/button" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" />
就是添加一个ImageView和一个Button的控件(注意他们的id号,等下要与MainActivityt.java文件里面的id号对应)
在TestOpenCV\app\src\main\res\drawable路径下面放上一张lena.png的图片
修改MainActivity的代码:
package com.brucehou.testopencv; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.os.Bundle; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Bitmap.Config; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import com.brucehou.testopencv.R; import org.opencv.android.Utils; import org.opencv.core.Mat; import org.opencv.imgproc.Imgproc; public class MainActivity extends Activity implements OnClickListener{ private Button btnProc; private ImageView imageView; private Bitmap bmp; static{ System.loadLibrary("opencv_java"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView) findViewById(R.id.imageView); bmp = BitmapFactory.decodeResource(getResources(), R.drawable.lena); imageView.setImageBitmap(bmp); btnProc = (Button) findViewById(R.id.button); btnProc.setOnClickListener(this); } @Override public 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; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override public void onClick(View v) { //test opencv Mat rgbMat = new Mat(); Mat grayMat = new Mat(); Utils.bitmapToMat(bmp, rgbMat); Imgproc.cvtColor(rgbMat, grayMat, Imgproc.COLOR_RGB2GRAY); Bitmap grayBmp = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), Config.RGB_565); Utils.matToBitmap(grayMat, grayBmp); imageView.setImageBitmap(grayBmp); }
}
编译、run就可以了
其中有几点要注意的:
一定要记得动态载入opencv的so:
static{ System.loadLibrary(“opencv_java”); }
比较容易坑人的一点是OpenCV sdk中的sample都是静态载入:这就需要你安装Opencv Manager,在android5.0上还会有崩溃的情况。。。
Comments
<% if(config.disqus_shortname) { %>