Android+Opencv+Eclipse+NDK环境搭建

8 篇文章 0 订阅
5 篇文章 0 订阅

《不懂之处可参考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

 

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

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.) 在项目根目录下创建jni目录,下面是要放进去的第一个文件Android.mk LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := main_jni #LOCAL_CFLAGS := LOCAL_SRC_FILES := main.cpp #LOCAL_LDLIBS := include $(BUILD_SHARED_LIBRARY) 2.) 在jni目录创建main.cpp #include using namespace std; #ifdef __cplusplus extern "C" { #endif class Test { public: Test(){}; ~Test(){}; int SomeFunc() { return 20140522; } }; jint Java_com_yxiaolv_testjni_MainActivity_SomeFunc(JNIEnv *env, jobject thiz) //红色部分必须和你java类包名一致 { Test *test = new Test(); return test->SomeFunc(); } #ifdef __cplusplus } #endif //将下面第3.)至第5.)步的代码片段放到eclipse创建android项目时自动产生的MainAcitivity.java中就可以了 3.) 在Java Activity代码中添加对这个jni的调用 (本例中是MainActivity.java ): static { System.loadLibrary("main_jni"); } 4.) 在调用者Activity中定义函数 native int SomeFunc(); 5.) 在activity中调用 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView tv = new TextView(this); int i = SomeFunc(); tv.setText( String.valueOf(i) ); setContentView(tv); } //下面的第6.)和第7.)步可以被集成的.cproject 和在.project中添加plugin之后一键编译,不用单独起dos窗口了。由于没有找到生成.cproject的工具,只能手写,所以本文不使用该方法,以后找到了好的方法再补充。委屈 6.) 在dos窗口中,cd到项目路径下,运行ndk-build 命令,该命令会自动搜索该路径子目录下的native项目,进行编译。 (Note: 编译完成后不要忘记了刷新项目)。 7.) 重新编译和部署项目,就可以看到已经包含了.so的apk运行在目标机上了。 摘自 http://stackoverflow.com/questions/13654678/how-compile-c-project-via-android-ndk 1). 如果不知道怎样安装和使用windows版的NDK,可以参考 http://blog.csdn.net/do_script/article/details/26478583
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值