一、到OpenCV官网下载SDK。

http://opencv.org/downloads.html

0818b9ca8b590ca3270a3433284dd417.png

选择Android平台的SDK,下载完成后解压。

二、新建AndroidStudio的项目

这里项目名为TestOpenCV。

0818b9ca8b590ca3270a3433284dd417.png

然后在File-New-ImportModule选择刚刚解压文件里的java文件夹。

0818b9ca8b590ca3270a3433284dd417.png

三、修改OpenCVLibrary310里的build.gradle

这里和app的build.gradle一致。

apply plugin: 'com.android.library'

android {

compileSdkVersion 23

buildToolsVersion "23.0.2"

defaultConfig {

minSdkVersion 15

targetSdkVersion 19

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'

}

}

}

四、导入Module

在app文件夹右键选择OpenModuleSettings,Dependencies里添加刚刚导入的Module:openCVLibrary310

0818b9ca8b590ca3270a3433284dd417.png

五、导入libs文件夹

将sdk解压文件夹里的libs文件夹拷到app/src/main文件夹下,并重命名为jniLibs。如果不需要在x86平台上跑可以删掉对应的lib文件。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

六、测试导入是否成功。

在刚刚下载的sdk包里面有示例教程,这里将tutorial里面的相机预览项目移植进来。

0818b9ca8b590ca3270a3433284dd417.png

首先在AndroidManifest.xml里面添加

然后布局文件里面添加

xmlns:tools="http://schemas.android.com/tools"

xmlns:opencv="http://schemas.android.com/apk/res-auto"

android:id="@+id/activity_main"

android:layout_width="match_parent"

android:layout_height="match_parent"

tools:context="com.example.opencv.MainActivity">

android:layout_height="match_parent"

android:layout_width="match_parent"

opencv:camera_id="any"

opencv:show_fps="true"

android:id="@+id/camera_view"

android:visibility="gone"/>

Activity代码如下

package com.example.testopencv;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.MenuItem;

import android.view.SurfaceView;

import android.view.WindowManager;

import org.opencv.android.BaseLoaderCallback;

import org.opencv.android.CameraBridgeViewBase;

import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;

import org.opencv.android.LoaderCallbackInterface;

import org.opencv.android.OpenCVLoader;

import org.opencv.core.Mat;

public class MainActivity extends AppCompatActivity implements CvCameraViewListener2 {

private CameraBridgeViewBase mOpenCvCameraView;

private boolean mIsJavaCamera = true;

private MenuItem mItemSwitchCamera = null;

private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {

@Override

public void onManagerConnected(int status) {

switch (status) {

case LoaderCallbackInterface.SUCCESS:

{

mOpenCvCameraView.enableView();

} break;

default:

{

super.onManagerConnected(status);

} break;

}

}

};

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

setContentView(R.layout.activity_main);

mOpenCvCameraView = (CameraBridgeViewBase) findViewById(R.id.camera_view);

mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);

mOpenCvCameraView.setCvCameraViewListener(this);

}

@Override

public void onPause()

{

super.onPause();

if (mOpenCvCameraView != null)

mOpenCvCameraView.disableView();

}

@Override

public void onResume()

{

super.onResume();

if (!OpenCVLoader.initDebug()) {

OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);

} else {

mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);

}

}

public void onDestroy() {

super.onDestroy();

if (mOpenCvCameraView != null)

mOpenCvCameraView.disableView();

}

public void onCameraViewStarted(int width, int height) {

}

public void onCameraViewStopped() {

}

public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {

return inputFrame.rgba();

}

}

然后运行,就会出现相机预览的界面了。

0818b9ca8b590ca3270a3433284dd417.png

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐