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 库
下载好 OpenCv4Android 后解压目录如下所示:

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 P R O J E C T S O U R C E D I R / o p e n c v / l i b / {PROJECT_SOURCE_DIR}/opencv/lib/ PROJECTSOURCE

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值