您的位置:首页 > 移动开发 > Android开发

android opencv2.4.10使用SIFT编译出libnonfree.so

2017-02-16 10:18 507 查看


My development environment is set up as follows:

android-ndk-r10d (install path: 
D:\adt-bundle-windows-x86_64-20140702\android-ndk-r10d\
)
OpenCV-2.4.10-android-sdk (install path: 
D:\CODE\OpenCV-2.4.10-android-sdk\
), Download
link
OpenCV-2.4.10 (install path: 
D:\CODE\OpenCV-2.4.10\
), Download
link


Building the nonfree module

We actually only need to copy a few files from 
OpenCV-2.4.10
 source
code to 
OpenCV-2.4.10-android-sdk
,
namely:

Copy the nonfree folder from 
OpenCV-2.4.10\sources\modules\nonfree\include\opencv2\
to 
OpenCV-2.4.10-android-sdk\sdk\native\jni\include\opencv2
.

Create a folder to hold our new project for 
libnonfree.so
.
Here, I call it 
libnonfree
.
Create a 
jni
 folder
under 
libnonfree
.
Copy the following files from 
OpenCV-2.4.10\sources\modules\nonfree\src
 to 
libnonfree\jni\
 folder:
nonfree_init.cpp
precomp.hpp
sift.cpp (use
the original file)
surf.cpp (use
the original file)

Building 
libnonfree.so
:

Create 
Android.mk
 and 
Application.mk
 scripts.
This 
Android.mk
 is
used to build 
libnonfree.so
.
Application.mk
Android.mk (you
should modify 
OPENCV_PATH
 where
your 
OpenCV-2.4.10-android-sdk
is)

cd
 into
the project folder 
libnonfree
 and
type 
ndk-build
 to
build the 
libnonfree.so
.

So far, you have got 
libnonfree.so
 along
with 
libopencv_java.so
 and 
libgnustl_shared.so
 in 
libnonfree\libs\armeabi-v7a
 folder.

You can easily build any SIFT or SURF applications using those libraries. If you want to use SIFT and SURF in JAVA code in your Android application, you only need to write JNI interfaces for the functions you want to use.


Building a sample application

Create a project folder call 
libnonfree_demo
.
Create a 
jni
 folder
inside the project folder. Then copy 
libnonfree.so
 along
with 
libopencv_java.so
 and 
libgnustl_shared.so
 into 
jni
.

Create a nonfree_jni.cpp in 
jni
.
It is simple SIFT test program. It basically reads an image and detects the keypoints, then extracts feature descriptors, finally draws the keypoints to an output image.

Create 
Android.mk
 and 
Application.mk
 inside 
jni
:
Application.mk
Android.mk (you
should modify 
OPENCV_PATH
 where
your 
OpenCV-2.4.10-android-sdk
is)

cd
 into
the project folder 
libnonfree_demo
 and
type 
ndk-build
 to
build the 
libnonfree_demo.so
.

At this point you can easily extend the sample app with your 
SVMDetector
.
Just copy the source and include files int to the folder 
libnonfree_demo\jni
 and
add cpp files to 
LOCAL_SRC_FILES
 in 
Android.mk
.

The whole source can be downloaded from: https://github.com/bkornel/opencv_android_nonfree.

Original source from: http://web.guohuiwang.com/technical-notes/sift_surf_opencv_android

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: