Android下使用OpenCV

获取OpenCV4Android SDK

  1. 访问SourceForge上的OpenCV下载页面并下载最新的可用版本。
  2. 将下载到的压缩包解压到一个你指定的目录。

使用opencv有两种方式,一种异步初始化,另一种是静态初始化,下面会分别进行说明

开始使用OpenCV

添加opencv库作为项目的依赖

异步初始化

异步初始化是推荐使用的方法,它依赖设备事先安装的OpenCV Manager.apk来访问OpenCV库,相对来说更方便快速

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
...
private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
Log.i(TAG, "OpenCV Loaded.");
break;
default:
super.onManagerConnected(status);
break;
}
}
};
@Override
protected void onResume() {
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_11, this, mOpenCVCallBack);
}
...
静态初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
static {
OpenCVLoader.initDebug();//采用静态初始化,不依赖Manager.apk
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

静态初始化不依赖OpenCV Manager.apk,你的项目是否有涉及JNI的开发,它的配置方法也是有所不同的。

直接复制上一步解压的OpenCV-android-sdk目录下的/sdk/native/libs
内容到你项目app/lis目录下

app/gradle配置如下
1
2
3
4
5
6
7
8
9
10
android {
...
sourceSets.main.jniLibs.srcDirs = ['libs']
...
}

复制OpenCV-android-sdk目录下的/sdk/native到你项目根目录下面

Android.mk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OpenCV_INSTALL_MODULES := on
OpenCV_CAMERA_MODULES := off
OPENCV_LIB_TYPE :=STATIC
ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
include ..\..\..\..\native\jni\OpenCV.mk
else
include $(OPENCV_MK_PATH)
endif
LOCAL_MODULE := OpenCV
CPP_FILES := $(wildcard $(LOCAL_PATH)/*.cpp)
LOCAL_SRC_FILES := $(CPP_FILES:$(LOCAL_PATH)/%=%)
LOCAL_LDLIBS += -lm -llog -latomic
include $(BUILD_SHARED_LIBRARY)
Application.mk
1
2
3
4
5
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := armeabi-v7a
APP_PLATFORM := android-9
app/gradle配置如下
1
2
3
4
5
6
7
8
9
10
android {
...
sourceSets.main.jniLibs.srcDirs = ['src/main/libs', '../native/libs']
...
}
打赏作者