Android Studio上使用OpenCV-android-sdk
2018-01-31 10:55
609 查看
在Android Studio上使用OpenCV:
1、进入OpenCV官网(不用翻墙):【https://opencv.org/】:
2、选择RELEASES,可以看见各个版本,根据你的需求下载,这里我选择最新版3.4.0,点击Android pack进入下载页面:
3、下载完成后解压,我们主要用到sdk文件夹:
4、新建一个空项目,然后Android Studio菜单-->File-->New-->Import Module
1)选择刚刚的sdk文件夹下的java文件夹;
2)Module name: Android studio会自动填充这项为openCVLibrary340 ,不用管它;
3)点击下一步,会出现三个复选框,都选上,点击Finish。
5、加入依赖
1)File-->Project Structure;
2)左边Modules栏下选择app;
3)在右边上面一栏中选择Dependencies ;
4)点击右边栏中的“+”,选择第三个Module Dependency;
5)点击ok退出,然后再点击ok退出;
6)点击app,打开app根目录下的build.gradle文件,记下
compileSdkVersion
buildToolsVersion
minSdkVersion
targetSdkVersion
然后点击openCVLibrary340,打开根目录下的build.gradle文件,把文件中
compileSdkVersion
buildToolsVersion
minSdkVersion
targetSdkVersion
后的数值改成app中一样的。
6、在app/src/main下新建文件夹jniLibs,将我们下载的OpenCV-android-sdk的sdk/native/libs下的所有文件拷贝到jniLibs下。
至此我们已经可以使用Opencv相关的功能了。
测试:
activity_main.xml:
参考:【Android Studio不安装opencv manager配置】https://jingyan.baidu.com/article/60ccbceb53533364cab197db.html
【在Android Studio 2.2上集成OpenCV4Android SDK】
http://blog.csdn.net/PZ0605/article/details/72778547
【GitHub上的项目:目标检测&目标追踪&人脸检测&人脸识别】https://github.com/kongqw/OpenCVForAndroid
1、进入OpenCV官网(不用翻墙):【https://opencv.org/】:
2、选择RELEASES,可以看见各个版本,根据你的需求下载,这里我选择最新版3.4.0,点击Android pack进入下载页面:
3、下载完成后解压,我们主要用到sdk文件夹:
4、新建一个空项目,然后Android Studio菜单-->File-->New-->Import Module
1)选择刚刚的sdk文件夹下的java文件夹;
2)Module name: Android studio会自动填充这项为openCVLibrary340 ,不用管它;
3)点击下一步,会出现三个复选框,都选上,点击Finish。
5、加入依赖
1)File-->Project Structure;
2)左边Modules栏下选择app;
3)在右边上面一栏中选择Dependencies ;
4)点击右边栏中的“+”,选择第三个Module Dependency;
5)点击ok退出,然后再点击ok退出;
6)点击app,打开app根目录下的build.gradle文件,记下
compileSdkVersion
buildToolsVersion
minSdkVersion
targetSdkVersion
然后点击openCVLibrary340,打开根目录下的build.gradle文件,把文件中
compileSdkVersion
buildToolsVersion
minSdkVersion
targetSdkVersion
后的数值改成app中一样的。
6、在app/src/main下新建文件夹jniLibs,将我们下载的OpenCV-android-sdk的sdk/native/libs下的所有文件拷贝到jniLibs下。
至此我们已经可以使用Opencv相关的功能了。
测试:
activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.opencvdemo.MainActivity" android:orientation="vertical" > <Button android:id="@+id/select_btn" android:text="选择图片" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Button android:id="@+id/process_btn" android:text="处理" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/imageView" android:src="@mipmap/ic_launcher" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>MainActivity.java:
package com.example.opencvdemo; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import org.opencv.android.OpenCVLoader; import org.opencv.android.Utils; import org.opencv.core.CvType; import org.opencv.core.Mat; import org.opencv.imgproc.Imgproc; import java.io.InputStream; public class MainActivity extends AppCompatActivity { private double max_size = 1024; private int PICK_IMAGE_REQUEST = 1; private ImageView myImageView; private Bitmap selectbp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); staticLoadCVLibraries(); myImageView = (ImageView)findViewById(R.id.imageView); myImageView.setScaleType(ImageView.ScaleType.FIT_CENTER); Button selectImageBtn = (Button)findViewById(R.id.select_btn); selectImageBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // makeText(MainActivity.this.getApplicationContext(), "start to browser image", Toast.LENGTH_SHORT).show(); selectImage(); } }); Button processBtn = (Button)findViewById(R.id.process_btn); processBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // makeText(MainActivity.this.getApplicationContext(), "hello, image process", Toast.LENGTH_SHORT).show(); convertGray(); } }); } //OpenCV库静态加载并初始化 private void staticLoadCVLibraries(){ boolean load = OpenCVLoader.initDebug(); if(load) { Log.i("CV", "Open CV Libraries loaded..."); } } private void convertGray() { Mat src = new Mat(); Mat temp = new Mat(); Mat dst = new Mat(); Utils.bitmapToMat(selectbp, src); Imgproc.cvtColor(src, temp, Imgproc.COLOR_BGRA2BGR); Log.i("CV", "image type:" + (temp.type() == CvType.CV_8UC3)); Imgproc.cvtColor(temp, dst, Imgproc.COLOR_BGR2GRAY); Utils.matToBitmap(dst, selectbp); myImageView.setImageBitmap(selectbp); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { Uri uri = data.getData(); try { Log.d("image-tag", "start to decode selected image now..."); InputStream input = getContentResolver().openInputStream(uri); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeStream(input, null, options); int raw_width = options.outWidth; int raw_height = options.outHeight; int max = Math.max(raw_width, raw_height); int newWidth = raw_width; int newHeight = raw_height; int inSampleSize = 1; if(max > max_size) { newWidth = raw_width / 2; newHeight = raw_height / 2; while((newWidth/inSampleSize) > max_size || (newHeight/inSampleSize) > max_size) { inSampleSize *=2; } } options.inSampleSize = inSampleSize; options.inJustDecodeBounds = false; options.inPreferredConfig = Bitmap.Config.ARGB_8888; selectbp = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri), null, options); myImageView.setImageBitmap(selectbp); } catch (Exception e) { e.printStackTrace(); } } } private void selectImage() { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent,"选择图像..."), PICK_IMAGE_REQUEST); } }
参考:【Android Studio不安装opencv manager配置】https://jingyan.baidu.com/article/60ccbceb53533364cab197db.html
【在Android Studio 2.2上集成OpenCV4Android SDK】
http://blog.csdn.net/PZ0605/article/details/72778547
【GitHub上的项目:目标检测&目标追踪&人脸检测&人脸识别】https://github.com/kongqw/OpenCVForAndroid
相关文章推荐
- android开发 android studio配置opencv for android sdk,使用opencv的java函数
- 【Android】Android Studio中使用OpenCV将彩图转换成灰度图
- 【Android】Android Studio使用OpenCV后,使APP不安装OpenCV Manager即可运行
- Android 使用OpenCV的三种方式(Android Studio)
- Android Studio 2.2 让你5分钟配置好 OpenCV for Android(java层和native层都可以使用)
- 编译并使用带有OpenCL模块的OpenCV for android SDK
- Android 使用OpenCV的三种方式(Android Studio)
- Android 使用OpenCV的三种方式(Android Studio)
- Android 使用OpenCV的三种方式(Android Studio)
- Android开发周报:50个Android Studio使用秘诀、高质量SDK设计详解
- 编译并使用带有OpenCL模块的OpenCV for android SDK
- Android Studio 使用 java 通过 OpenCV4Android 实现 Hello OpenCV
- OpenCV Android 通过 jni调用 使用opencv (Android Studio)
- Android 使用OpenCV的三种方式(Android Studio)
- Android 使用OpenCV的三种方式(Android Studio)
- 【Android】Android Studio使用OpenCV的配置方法
- Android studio导入OpenCV-android-sdk出现Error:(22, 0) Gradle DSL method not found: 'android()'
- 使用android studio时提示Unable to access Android SDK add-on list
- Android Studio中找到项目的密匙数字证书(MD5和SHA1)配置高德地图Android地图SDK【高德地图使用】
- Android开发——Android Studio中配置及使用OpenCV示例