【opencv】ndk编译opencv源码

本篇文章主要介绍如何用ndk编译opencv源码。这篇文章所介绍的步骤是在通过CMAKE配置了opencv源码后的基础上进行的。如果还没有经过vs配置opencv源码,请参照: 【opencv】如何配置修改并调试opencv源代码

我们的目标是通过ndk编译opencv源码,能够根据自己的需求修改编译对应的opencv库。整个过程重要的也就是写makefile文件进行编译而已。

1、配置环境

系统:win7
源码版本:opencv3.0.0
开发环境:eclipse juno with adt, android-ndk-r10b

由于opencv模块化做得比较好,这里以opencv_core为例讲解如何进行配置。

2、复制opencv_core源码

从安装的opencv源码中找到opencv_core模块,并复制到我们的安卓工程。具体位置在:opencv\sources\modules\core
将core文件夹下的src及include复制到安卓工程的jni文件夹下,如下图所示:

这里写图片描述

需要注意到的是,这里需要把hal文件夹也复制过来。而且,需要在整个opencv工程里面找到对应cvconfig.h,具体位置应该是在opencv\build\include\opencv2,并且复制过来,这个文件用于配置对应的编译选项。如:

/* OpenCV compiled as static or dynamic libs */
#define BUILD_SHARED_LIBS
#define __OPENCV_BUILD
/* Compile for 'real' NVIDIA GPU architectures */
//#define CUDA_ARCH_BIN ""

/* Create PTX or BIN for 1.0 compute capability */
/* #undef CUDA_ARCH_BIN_OR_PTX_10 */

/* NVIDIA GPU features are used */
//#define CUDA_ARCH_FEATURES ""

3、修改android.mk

这里我们修改jni下的android.mk文件,具体说明见注释:

LOCAL_PATH := $(call my-dir)
#opencv依赖于zlib库,该库在NDK中已经提供了,但要在include的时候加入
#进去,所以定义了ZLIB_PATH变量,将其指向zlib.h的位置,并在之后三个模
#块的编译中加入到include中。
ZLIB_PATH:= D:\Program Files\adt-bundle-windows-x86_64-20140702\android-ndk-r10b\platforms\android-19\arch-arm\usr

include $(CLEAR_VARS)

LOCAL_MODULE := myCamera
#定义include文件位置
LOCAL_C_INCLUDES := \
        $(LOCAL_PATH)/core/include \
        $(LOCAL_PATH)/core/include \
        $(ZLIB_PATH)/include

#编译opencv必须的编译标志,不加会提示exception等错误。如果是在工作
#中某个系统里(类ANDROID)中增加opencv的功能,但系统的编译选项中没
#开-frtti,则会在链接的时候报错。
LOCAL_CPPFLAGS := -frtti -fexceptions
LOCAL_LDLIBS += -llog -lz

#源文件,需要注意的是,这里需要把hal也
LOCAL_SRC_FILES := \
         core/src/precomp.hpp \
         core/src/algorithm.cpp \
         core/src/alloc.cpp \
         core/src/arithm.cpp \
         core/src/array.cpp \
         core/src/bufferpool.impl.hpp \
         core/src/command_line_parser.cpp \
         core/src/conjugate_gradient.cpp \
         core/src/convert.cpp \
         core/src/copy.cpp \
         core/src/cuda_gpu_mat.cpp\
         core/src/cuda_host_mem.cpp\
         core/src/cuda_info.cpp\
         core/src/cuda_stream.cpp\
         core/src/datastructs.cpp \
         core/src/downhill_simplex.cpp \
         core/src/dxt.cpp \
         core/src/glob.cpp \
         core/src/kmeans.cpp \
         core/src/lapack.cpp \
         core/src/lda.cpp \
         core/src/lpsolver.cpp \
         core/src/mathfuncs.cpp \
         core/src/matmul.cpp \
         core/src/matop.cpp \
         core/src/matrix.cpp \
         core/src/ocl.cpp \
         core/src/opencl_kernels_core.hpp \
         core/src/opengl.cpp \
         core/src/out.cpp \
         core/src/parallel_pthreads.cpp \
         core/src/pca.cpp \
         core/src/persistence.cpp \
         core/src/parallel.cpp \
         core/src/rand.cpp \
         core/src/stat.cpp \
         core/src/system.cpp \
         core/src/tables.cpp \
         core/src/stl.cpp \
         core/src/types.cpp \
         core/src/umatrix.cpp \
         hal/src/arithm.cpp \
         hal/src/color.cpp \
         hal/src/filter.cpp \
         hal/src/mathfuncs.cpp \
         hal/src/matrix.cpp \
         hal/src/prepcomp.hpp \
         hal/src/resize.cpp \
         hal/src/stat.cpp \
         hal/src/warp.cpp

#这里加上我们自己的C文件            
LOCAL_SRC_FILES += image.cpp


LOCAL_LDLIBS+= -L$(SYSROOT)/usr/lib 

include $(BUILD_SHARED_LIBRARY)

4、修改Appliccation.mk

APP_ABI := armeabi-v7a
APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions  
APP_PLATFORM := android-8

5、需要注意的问题:

如果在过程中遇到unreference的问题,大多是没有包含头文件或者函数定义没有找到,在opencv源码中查找对应的函数定义,然后复制到工程项目中即可。

这里可以下载我已经配置好的部分工程进行参考:工程项目

接下来就可以自己在opencv源码里

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值