NDk編譯opencv for Android,並引用在Unity3d遊戲中的一般步驟

來源:互聯網
上載者:User

標籤:http   rtt   .com   oca   mic   ted   show   err   call   

本文使用:Unity3d + opencv + AndroidUnity3d中可以調用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    := aropencvLOCAL_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 -fexceptionsAPP_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遊戲中的一般步驟

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.