android opencv 函数,Android 端基于 OpenCV 的边框识别功能

本篇文章主要就边框识别部分说一下开发过程及实现原理,通过阅读本篇文章,你将具备以下技能:了解 NDK 开发的基本步骤,能使用 Java、C++/C 混合开发简单的应用

了解 OpenCV 库的作用及其用法,能使用 OpenCV 做图像处理

了解基于 OpenCV 的边框识别实现

OpenCV 的全称是 Open Source Computer Vision Library,是一个使用 C++ 编写的跨平台的计算机视觉库,能对输入的图片进行处理,包括常见的高斯模糊,提取灰度图片,提取轮廓等等,可以应用于增强现实,人脸识别,运动跟踪,物体识别,图像分区等。

在 Android 平台需要使用 JNI 技术来调用 C++ 的库,事实上,OpenCV 的官网已经提供了编写好的 Android 库:OpenCv4Android,我们可以按照提示导入该库,就可用以使用 Java 代码来调用了。但是该库包含了 OpenCV 所有的模块,造成了该库体积非常大,其中很多并不是我们需要的。所以我的做法是只使用该库提供的编译好的 C++ 库,挑选自己需要用到的模块,引入其动态或者静态库,编写 C++ 代码调用 OpenCV 的这些模块完成主要功能,最后使用 JNI 技术编写 Java 接口供 Android 程序调用。

导入 OpenCV 库OpenCV-2.4.13-android-sdk|_ doc

|_ samples|_ sdk

|    |_ etc

|    |_ java

|    |_ native

|          |_ 3rdparty

|          |_ jni

|          |_ libs

|               |_ armeabi

|               |_ armeabi-v7a

|               |_ x86

||_ LICENSE

|_ README.android

sdk/java 目录提供了 OpenCv  的 Java API,导入到项目中,并且将 native/libs 下面的 native 库导入之后就可以使用 OpenCV 的 Java API 了。native/jni 目录下提供了编译用的 cmake 文件以及头文件。

在 SmartCropper 中只使用到了 opencv_core 与 opencv_imgproc 模块,  所以只需要导入这两个模块的头文件与动态库/静态库就行了。

目录如下所示:smartcropperlib├── opencv│   ├── include│   │      └── opencv2│   │      ├── core│   │      ├── imgproc│   │      ├── opencv.hpp│   │      └── opencv_modules.hpp│   └── lib│        ├── armeabi│        │   ├── libopencv_core.a│        │   └── libopencv_imgproc.a│        ├── armeabi-v7a│        ├── mips│        └── x86├── CMakeLists.txt└── build.gradle└── src

└── main

├── cpp

│    ├── Scanner.cpp

│    ├── android_utils.cpp

│    ├── include

│    │     ├── Scanner.h

│    │     └── android_utils.h

│    └── smart_cropper.cpp

├── java

└── res

编写 cmake 文件:include_directories(opencv/include

src/main/cpp/include)

add_library(opencv_imgproc STATIC IMPORTED)

add_library(opencv_core STATIC IMPORTED)

set_target_properties(opencv_imgproc PROPERTIES IMPORTED_LOCATION${PROJECT_SOURCE_DIR}/opencv/lib/${ANDROID_ABI}/libopencv_imgproc.a)

set_target_properties(opencv_core PROPERTIES IMPORTED_LOCATION${PROJECT_SOURCE_DIR}/opencv/lib/${ANDROID_ABI}/libopencv_core.a)

add_library( smart_cropper

SHARED

src/main/cpp/Scanner.cpp

src/main/cpp/smart_cropper.cpp

src/main/cpp/android_utils.cpp)

find_library( log-lib

log)

find_library(jnigraphics-lib

jnigraphics)

target_link_libraries( smart_cropper

opencv_imgproc

opencv_core

${log-lib}

${jnigraphics-lib})

主要注意点如下:include_directories添加头文件查找路径,包括引入库的和自己写的

add_library添加动态库或静态库,其中本地的动态库名称,位置可以由set_target_properties设置

find_library通过名称查找并引入库,可以引入 NDK 中的库,比如日志模块

target_link_libraries添加参加编译的库名称,也可以是绝对路径&

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值