Android+Opencv+Eclipse+NDK环境搭建

《不懂之处可参考http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html

一、首先下载所用的资源

      Opencv-android-sdk:地址可以去官网上下载,http://sourceforge.net/projects/opencvlibrary/files/opencv-android/

                                            只不过有点慢,这里有一个下载地址,是一个网盘

                                                      http://pan.baidu.com/wap/link?uk=1057195248&shareid=4038639114&third=0ss

     Android-NDK:              可以去官网下载,https://developer.android.com/tools/sdk/ndk/index.html

                                    或者去http://dl.dbank.com/c0v9ubaffo

二、配置Eclipse
      
将下载好的压缩包解压缩到没有中文没有空格的路径上去。

       打开eclipse->window->Preferences->Android->NDK:右侧出现NDK location:浏览至你的NDK解压缩的路径并点击应用(Apply)。

 

同时将NDK所在的路径添加至系统path中,方便以后命令行操作。

 

三、工程开发时的配置:

     在android中使用opencv有两种方式,一种是使用JAVA API,一种是使用混合编程,java语言调用C++语言编译的库文件,使用JNI 编程。

四、使用Java API:

    首先在开发时导入opencv的库,在文件中-》导入-》Android->existing android code to workspace.-》浏览你的opencv sdk 所在的目录,进入sdk/java/,导入opencv的库。

    

接着在你的工程上点击右键->属性-》android:下面有个 add ,点击加载opencv的库,最后应用。

 

此时使用Android 的JAVA API,已经可以开发了,一般包的形式为

org.opencv.OpenCV模块名).(OpenCV类名)

此时使用opencv 库要注意,opencv库的连接形式有两种:一种是异步连接,一种是静态连接

1:异步连接:

代码中应注意在活动中要添加一个BaseLoaderCallback 的成员并实例化,同时实现重载onResume,如下图所示

public class Sample1Java extends Activity implements CvCameraViewListener {

    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS:
                {
                    Log.i(TAG, "OpenCV loaded successfully");
                    mOpenCvCameraView.enableView();
                } break;
                default:
                {
                    super.onManagerConnected(status);
                } break;
            }
        }
    };

    @Override
    public void onResume()
    {
        super.onResume();
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);
    }

    ...
}

2:静态连接:

   将所需要的库从

<OpenCV-2.4.8-androidsdk>/sdk/native/libs/<target_arch>中直接复制到自己工程的libs/<target_arch>下面。

若含有JNI成分,看下文如何生成并修改android.mk。最后在活动类中加入以下代码:

static {
    if (!OpenCVLoader.initDebug()) {
        // Handle initialization error
    }
}

若需要加载其他库则:

static {
    if (!OpenCVLoader.initDebug()) {
        // Handle initialization error
    } else {
        System.loadLibrary("my_jni_lib1");
        System.loadLibrary("my_jni_lib2");
    }
}

剩下的就是自己写代码了

 注:apk 生成之后安装到手机之后若不能运行,手机还需下载opencv manager.apk。

五、使用JNI:

     前期仍像使用java api 一样将opencv导入并加载。接下来是不同之处:

     首先添加本地支持:在工程上右键点击android tools -》ddnative support

这时出现了添加的库的名称的对话框,写个名字即可:

点击finish。之后刷新工程,你会发现工程下面出现了新的东西。

在项目中多了一个“jni”文件夹,该文件夹这时候多出了两个文件,如本程序中多了“ImgProcess.cpp”和“Android.mk”

修改android.mk:如下

LOCAL_PATH := $(call my-dir)  

include $(CLEAR_VARS)  

OPENCV_LIB_TYPE:=STATIC

ifeq ("$(wildcard $(OPENCV_MK_PATH))","")  

#try to load OpenCV.mk from default install location  

#注意下面的根据自己的情况修改

include E:\java\OpenCV-2.4.5-android-sdk\sdk\native\jni\OpenCV.mk 

else  

include $(OPENCV_MK_PATH)  

endif  

LOCAL_MODULE    := ImgFun  

LOCAL_SRC_FILES := ImgFun.cpp  

include $(BUILD_SHARED_LIBRARY)

同时在JNI文件夹下添加Application.mk

内容如下:

APP_STL:=gnustl_static  

APP_CPPFLAGS:=-frtti -fexceptions  

APP_ABI:=armeabi armeabi-v7a

 

接下来是一些eclipse的配置:

首先在工程属性中,在“C/C++ Build”下的“Tool Chain Editor”中选择android GCC

C/C++ Build的Builder Settings"中配置"Build command:"直接输入ndk-build

在“Behaviour”中设置

 

 

此时还需要配置javah外部工具方法如下:

 




最后一行字为:-v -classpath "${project_loc}/bin/classes" -d "${project_loc}/jni" ${java_type_name} 

 

下一步:

   打开工程性属,Project Properties -> C/C++ General -> Paths and Symbols

 

 

 添加include directorires 时注意选择 

add to all configurations 

add to all languages



最后注意api版本不要低于14

 

至此环境已经配好了,至于如何使用则请关注下一篇博文

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值