本文使用: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. 【Tarjan缩点】PO3352 Road Construction

    Road Construction Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 12532   Accepted: 630 ...

  2. PE文件简介

    PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE.DLL.OCX.SYS.COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接 ...

  3. javascript 执行环境细节分析、原理-12

    前言 前面几篇说了执行环境相关的概念,本篇在次回顾下 执行环境(Execution context,简称EC,也称执行上下文 ) 定义了变量或者函数有权访问的数据,决定了各自行为,每个执行环境都有一个 ...

  4. 博客已经迁移到 http://imbotao.top 也会同步到这儿

    完全是看到别人搭建的 hexo + github Pages 博客界面很好看,很简洁,自己也喜欢折腾,就鼓捣了一个. 也在阿里云买了自己的域名,个人感觉在博客的样式和功能上花费了太多的时间,不过现在终 ...

  5. Django-Views模块详解

    http请求中产生的两个核心对象 http请求: HttpRequest http响应: HttpResponse 所在位置 django.http httpRequest属性: HttpReques ...

  6. python写外网收集信息器

    简单化,知道IP去扫描ip import socket from socket import * a=input('请输入域名:') try: ip=gethostbyname(a) print('[ ...

  7. cs231n spring 2017 lecture7 Training Neural Networks II 听课笔记

    1. 优化: 1.1 随机梯度下降法(Stochasitc Gradient Decent, SGD)的问题: 1)对于condition number(Hessian矩阵最大和最小的奇异值的比值)很 ...

  8. 2017 Multi-University Training Contest - Team 1 1002&&HDU 6034 Balala Power!【字符串,贪心+排序】

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  9. Educational Codeforces Round 2_B. Queries about less or equal elements

    B. Queries about less or equal elements time limit per test 2 seconds memory limit per test 256 mega ...

  10. Codeforces Round #332 (Div. 2)_B. Spongebob and Joke

    B. Spongebob and Joke time limit per test 2 seconds memory limit per test 256 megabytes input standa ...