本文使用:Unity3d + opencv + Android
Unity3d中可以调用opencv 编译好的.so 动态库,在生成Android apk时可以正常运行。
 
因为Android系统是基于Linux的,所以不能使用windows编译连接的dll动态库,必须使用.so动态库,CPU架构为ARMv7。
 
一.打包自己的test.cpp的源码
1)首先下载与自己使用opencv版本相同的opencv for android
复制sdk/native目录到自己的工作目录。比如 E:/ARso。
在sdk/native/libs中存在已经编译好的.a文件,各种CPU架构的都有
在sdk/native /jni中有OpenCV.mk,用与将这些.a静态库打包为.so动态库的配置文件
 
2)在工作目录E:/ARso中新建目录 jni

3)在jni中新建两个配置文件,以及拷贝自己需要编译成.so的源码文件
 
4)Android.mk如下:
LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 
OPENCV_LIB_TYPE=STATIC 
 
include E:/work/ARso/sdk/native/jni/OpenCV.mk 
LOCAL_MODULE    := aropencv
LOCAL_CFLAGS    := -Werror 
LOCAL_SRC_FILES := ar.cpp 
#LOCAL_LDLIBS    += -llog -landroid -lEGL -lGLESv1_CM 
LOCAL_LDLIBS    += -llog   
#build dynamic library 
include $(BUILD_SHARED_LIBRARY)
 
5)Application.mk如下:
APP_STL := gnustl_static
#PP_CPPFLAGS := -frtti -fexceptions
APP_ABI :=  armeabi armeabi-v7a
#APP_PLATFORM := android-8
 
6)ar.cpp代码如下:
// ar.cpp : 定义 DLL 应用程序的导出函数。
//
 
 
//#include<iostream> 
#include <opencv2\opencv.hpp>
 
using namespace cv;
 
 
 
extern "C"{
 
//int addf(int x, int y)
//{
//    return x + y;
//}
 
int show() {
    IplImage* img1 = cvCreateImage(cvSize(320, 180), IPL_DEPTH_8U, 3);
    uchar r1, g1, b1;
 
    for (int i = 0; i < img1->height; i++)
    {
        uchar *ptrImage = (uchar*)(img1->imageData + i * img1->widthStep);
        //uchar *ptrDst = (uchar*)(img->imageData + i * img->widthStep); 
 
        for (int j = 0; j < img1->width; j++)
        {
            ptrImage[3 * j + 0] = 255;
            ptrImage[3 * j + 1] = 0;
            ptrImage[3 * j + 2] = 0;
        }
    }
 
    Mat img2 = cvarrToMat(img1);
 
    // 在窗口中显示游戏原画 
    //imshow("img2",img2);
    // 等待6000 ms后窗口自动关闭 
    return img2.rows;   
 
}
 
}
 
5)使用ndk-build命令编译ar.cpp为.so文件。在使用ndk之前需要配置环境变量。
在E:/ARso/jni目录中运行 ndk-build

说明编译成功,会在ARso/libs目录中生成两种CPU架构的.so动态库libopencv.so
 
6)在Unity3d中使用。
将libopencv.so拷贝到Unity3d中:在Assets目录下新建目录 Plugins/Android,拷贝至此
 
在代码中加入:
  [DllImport( "aropencv")]
    private static extern int show();
 
在调用时直接调用show()即可
 
7)Unity Build 为Android程序包。使用adb logcat -s Unity可以查看是否有报错日志
    打印错误信息以及Debug.Log的信息。

NDk编译opencv for Android,并引用在Unity3d游戏中的一般步骤的更多相关文章

  1. ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用

    作者:wainiwann 出处:http://www.cnblogs.com/wainiwann/ 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则 ...

  2. 【转】NDK编译可执行文件在Android L中运行显示error: only position independent executables (PIE) are supported.失败问题解决办法。

    原文网址:http://blog.csdn.net/hxdanya/article/details/39371759 由于使用了NDK编译的可执行文件在应用中调用,在4.4及之前的版本上一直没出问题. ...

  3. 在fedora25x86下编译opencv的Android版本的过程记录

    准备材料: 1. 32位的Fedora25(不建议使用64位系统----64位系统下也是可以编译的,这里为了简单起见,考虑使用32位操作系统.事实上,本人在64位操作系统下也做了尝试,也完成了编译.) ...

  4. NDK编译可执行文件在Android 中运行显示error: only position independent executables (PIE) are supported.失败问题解决办法。

    由于使用了NDK编译的可执行文件在应用中调用,在Android 7.0上的运行情况发现,当运行该可执行文件时,报如下错误: error: only position independent execu ...

  5. 【失败的经验】在linux下编译opencv for android

    cd /home/ahfu#选择opencv 3.4.6版本来编译wget https://github.com/opencv/opencv/archive/3.4.6.tar.gztar -zxvf ...

  6. 用 eclipse ndk 编译 cocos2d-x for Android

    Android 环境搭建不详述,,可以google,,, 我用的coco2dx 是 2.14 ,2.14 用 create_project.py 脚本创建工程,Python环境配置也是很简单,这里了不 ...

  7. ndk编译时的通用Android.mk文件

    LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := live555 MY_SRC_PATH := $(LOCAL_PA ...

  8. Linux下使用NDK编译FFMPEG(libstagefright)

    这个月要负责一个项目,使用FFMPEG渲染视频,主要是Android端的,由于性能要求,要使用硬解码,但网上大多数教程都是没有libstagefright的,所以个人觉得,生成的so库文件也是没有开启 ...

  9. ndk 编译 boost 库,支持serialization

    Boost库是一个可移植.提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一. Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容.在C+ ...

随机推荐

  1. 用vue官方提供的模板vue-cli搭建一个helloWorld案例

    安装环境 安装node.js并配置环境变量 安装淘宝镜像,npm install -g cnpm --registry=https://registry.npm.taobao.org 安装webpac ...

  2. from Require.js to Webpack(why)

    写在前面: 本文主要参考 From Require.js to Webpack - Part 1 (the reasons),原文作者将项目从 require.js 转移到了 webpack 并详细说 ...

  3. struts2中配置文件的调用顺序

    1.default.properties 该文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2中 2.struts-default.xml 该文件保存在 ...

  4. React-Native 学习笔记-Android开发平台-开发环境搭建

    详细步骤请查看官网对应文档,BUT,有些注意事项请注意! 1,优先安装Node.js,因为后面可以使用npm安装软件, 2,注意不要使用CNPM!!!!!!!!! 3,Android Studio 请 ...

  5. python端口扫描器

    吃了个火鸡面后感觉到了怀疑人生!!!!!!!!!妈耶,在也不吃了.思路都给辣没了!!! python端口扫描器代码如下: #-*-coding:utf-8 from socket import * i ...

  6. C/C++中__builtin_popcount()的使用及原理

    __builtin_popcount()用于计算一个 32 位无符号整数有多少个位为1 Counting out the bits     可以很容易的判断一个数是不是2的幂次:清除最低的1位(见上面 ...

  7. HDU 1541 树状数组

    树状数组入门博客推荐 http://blog.csdn.net/qq_34374664/article/details/52787481 Stars Time Limit: 2000/1000 MS ...

  8. ICMP TYPE-CODE查阅表

    我们在使用ICMP协议进行作业时,经常会用到ICMP类型和code,这里给出ICMP类型和code对应表. ICMP TYPE CODE对照表 TYPE CODE Description Query ...

  9. JQuery的deferred对象学习总结

    什么是deferred? 可以帮助我们按规定的顺序执行函数,比如说我们ajax请求数据之后,对dom进行数据填充,那我们就要先执行完ajax,拿到数据之后才能进行dom数据填充,所以这就是一个顺序执行 ...

  10. 用于 C&sharp; 图像识别的轮廓分析技术

    用于 C♯ 图像识别的轮廓分析技术 供稿:Conmajia 标题:Contour Analysis for Image Recognition in C# 作者:Pavel Torgashov 此中文 ...