• Android之OpenCv


      这几天要在Android平台上实现OpenCv相关的功能,看了几个博客、论文,终于实现了Android上OpenCv开发的一个简单例子。期间遇到了不少大大小小的问题,现总结一下。当然还有很多问题我自己也不是很明白,希望大家不吝赐教。

    、准备工作

      1.Windows平台下搭建好Android开发环境

       这里特别提一下Android SDK环境变量的配置(之前做android开发并没有配置SDK环境变量衰,感觉自己好弱啊)

       1.1 和配置Jdk环境变量类似,打开 计算机->属性->高级系统设置->高级->环境变量,在系统环境变量栏目下新建变量"ANDROID_SDK_HOME",并设置变量值为adt-bundle-windows目录下sdk目录的路径,我的是E:adt-bundle-windows-x86_64_20140101sdk

       1.2 在path中添加"%ANDROID_SDK_HOME% ools;%ANDROID_SDK_HOME%platform-tools".注意分号分隔

       1.3 检查SDK是否配置成功,cmd命令行输入android –h,出现如下结果,表明配置成功

        

      2.Android NDk的安装与配置

      下载地址:https://developer.android.com/tools/sdk/ndk/index.html

      使用最新ndk,直接抛弃cygwin(貌似版本在r7以上),以前做Android的项目要用到NDK就必须要下载NDK,下载安装Cygwin(模拟Linux环境用的),下载CDT(Eclipse C/C++开发插件),还要配置编译器,环境变量,特别麻烦,新版就不需要了。

      如下图是我下载的NDK版本参数

      

      双击该.exe 文件,运行会提示选择解压目录,可以任意解压到某一目录,我选择解压到了E盘根目录下。

        在eclipse中,选择windows->Preference->Android->NDK,然后添加刚才解压的NDK目录的路径,如下图所示

      

      3. 配置OpenCv for android环境

      下载地址:http://sourceforge.net/projects/opencvlibrary/files/opencv-android/(我下载的是OpenCV-2.4.9-android-sdk.rar)

      解压该文件。将解压后的目录下的sdk改名为:OpenCVSdk(可以随意,也可以不改,方便就好)。

      打开eclipse,选择FIle->import,选择Existing project into workspace……导入该sdk工程。该工程师在我们做OpenCv开发时要引用的第三方类库,所以我们要设置其属性:

      

      这种情况下,我们就可以直接调用android为我们封装好的openCv接口进行开发。

    二、NDK开发的实例,参照网上资料学习的第一个入门工程。

      新建android工程,命名为TestOpenCv。

      1.新建用于创建本地函数调用的类ImageProc.java 

    1 package my.example.ndkopencv;
    2 
    3 public class ImageProc {
    4     public static native int[] grayProc(int[] pixels, int w, int h);
    5 }

      2.生成c++头文件

      打开cmd,进入工程所在的目录下的bin/classes目录下,执行com.example.testopencv.ImageProc命令:

      

      此时,在D:WorkSpaceTestOpenCvinclasses目录下生成com_example_testopencv_ImageProc.h文件,将该文件重命名为ImageProc.h。

      3.生成本地jni引用

      项目右键,选择Android Tools->Add Native Support

      

      此时会生成一个JNI文件目录,如下图

      

      将之前生成的ImageProc.h复制到该目录下,

      下面分别介绍jni目录下的文件

      3.1.Application.mk

    APP_STL:=gnustl_static
    APP_CPPFLAGS:=-frtti -fexceptions 
    APP_ABI:= armeabi-v7a 
    

      3.2.Android.mk

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    
    OpenCV_INSTALL_MODULES:=on
    OPENCV_CAMERA_MODULES:=off
    
    
    OPENCV_LIB_TYPE:=STATIC
    
    
    ifeq ("$(wildcard $(OPENCV_MK_PATH))","")
    include ../OpenCvSdk/native/jni/OpenCV.mk
    else  
    include $(OPENCV_MK_PATH)  
    endif 
    
    LOCAL_SRC_FILES  := ImageProc.cpp
    LOCAL_MODULE     := image_proc
    
    LOCAL_LDLIBS    += -lm -llog 
    			
    include $(BUILD_SHARED_LIBRARY) 
    

      第一行:指明当前编译路径;

      第二行:清空变量;

      第三行:自动将依赖的OpenCV的so库拷贝到libs目录下

      include ../OpenCvSdk/native/jni/OpenCV.mk :将OpenCV类库中的编译文件包含进来,如此一来在我们的工程中即可使用OpenCV类库;

      LOCAL_SRC_FILES := ImageProc.cpp :指定需要编译的C++源文件;

      LOCAL_MODULE := image_proc :指定编译生成的类库名称;

      include $(BUILD_SHARED_LIBRARY) :调用命令将源文件编译为静态库。

      3.3.ImageProc.cpp

      这里是c++源文件,根据我们不同的需求编写相应的代码。注意这里有入口函数,需要直接从之前生成的.h文件中复制:

      

      如上图,我定义了2个本地函数,就可以直接复制该函数到.cpp文件中作为入口函数。

    4. 导入相应的包

      选中工程,右键选择properties,在左侧选择C/C++ General->Paths and Symbols.

      

      这里我是很盲目的一个一个导入的,很想知道有没有比较快捷的方法快速导入。求不吝赐教。

      至此,开发环境基本完成。

  • 相关阅读:
    Mac 修改hosts
    MTK平台系统稳定性分析
    由MTK平台 mtkfb 设备注册疑问引发的知识延伸--ARM Device Tree
    mtk display 架构
    【6572】关于mtk平台display模块的学习探讨
    如何用Bugzilla系统管理产品研发过中相关需求和bug
    Bugzilla 系统企业应用案例
    MT6753平台一项目不同手机最低亮度存偏差问题分析过程
    嵌入式驱动实习生试题(答案)
    嵌入式驱动实习生试题
  • 原文地址:https://www.cnblogs.com/xuepeng0521/p/4140932.html
Copyright © 2020-2023  润新知