须知

引入 Java 版本中, 直接使用 java 提供出来的 api 不是很方便在 Android 中直接使用, 为什么还要进行 jni c++/c 的引入和编写逻辑呢。 是因为 Java 版本中, 图片拼接的代码没有合入到 so 中, java 中也没有对应的类和方法供我们使用。 所以为了使用 stitcher 来进行图片拼接, 可能有一下几步:

  1. 降级 opencv 版本到 so 中存在 stitcher 代码的老版本。
  2. 自己编译 opencv 源码, 把 stitcher 的代码包含到 so 中。
    其中第二对于业务开发的来说暂时有点难。 所以先使用第一去解决该问题。

引入

引入头文件及声明

在下载下来的 opencv sdk 中找到 jni 中的 include, 进行引入。
引入头文件及声明
引入 so 文件
引入 so 文件

CMakeLists.txt 编写

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.10.2)

# Declares and names the project.

project("opencvdemo2")

include_directories(include)

# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

add_library( # Sets the name of the library.
opencvdemo2

# Sets the library as a shared library.
SHARED

# Provides a relative path to your source file(s).
native-lib.cpp)


add_library(
opencv_java3
SHARED
IMPORTED
)

set_target_properties(
opencv_java3
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/libs/${CMAKE_ANDROID_ARCH_ABI}/libopencv_java3.so
)

add_library(
libc__shared
SHARED
IMPORTED
)

set_target_properties(
libc__shared
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/libs/${CMAKE_ANDROID_ARCH_ABI}/libc++_shared.so
)

#message(${CMAKE_SOURCE_DIR}/libs/${CMAKE_ANDROID_ARCH_ABI}/)

# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
log-lib

# Specifies the name of the NDK library that
# you want CMake to locate.
log)

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # Specifies the target library.
opencvdemo2

libc__shared
opencv_java3

# Links the target library to the log library
# included in the NDK.
jnigraphics
${log-lib})