opencv库同时支持java api,所以如果要完成一些简单的任务的话,用它就可以解决。但是对于一些复杂图像操作的时候,就需要用到c++来开发。在这里先简单说一下如何搭建c++编译环境。
首先在eclipse配置好android开发环境基础上,下载ndk,现在ndk都在10及以上了,无需再用cygwin,下载后直接解压到指定文件夹后,再eclipse中Windows->Perferences->Android->NDK中添加ndk的路径即可。以防万一再添一条,在Perfences->c/c++->Environment中添加NDK_ROOT,value中调价路径。
ndk配置完成后再配置一下CDT,这个非常简单,不赘述。
然后我们就把opencv的sdk导入到eclipse中,会看到opencv的lib,如果有报错的话就到Project->Clean一下。
然后直接导入我们的face-detection工程,因为这些samples已经写好,所以一打开opencv的lib已经在项目中,但要注意的是jni文件下的android.mk文件,下为我的文件内容,做了一下改动。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
OPENCV_LIB_TYPE:=SHARED
include ../../sdk/native/jni/OpenCV.mk
LOCAL_SRC_FILES := DetectionBasedTracker_jni.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)
LOCAL_LDLIBS += -llog -ldl
LOCAL_MODULE := detection_based_tracker
include $(BUILD_SHARED_LIBRARY)
原本OPENCV开头的三行代码被#注掉了,这样的情况可能会在console中出现
WARNING:jni/Android.mk:detection_based_tracker: non-system libraries in linker flags: -lopencv_java3
或者类似的错误,把#号删除,off改成on即可
在include这一行代码中可以看到引用了sdk库,这里即要注意一开始解压opencv的时候最好不要把sample和sdk分开,否则会找不到,要自己改路径,所以建议放在一个文件夹下
这个情况下编译一般没有问题了,但如果打开了DetectionBasedTracker_jni的cpp或者h文件后,会发现全是错误,而且都改不了,最快的解决办法是删除工程重新导入并且不要打开这两个文件。直接编译就不会报错了