2015/02/18

OpenCV+cocos2d-x 環境構築(Android編)

cocos2d-x と OpenCV を一緒に使う環境を作った時のメモ。Android編 を記します。
cocos2d-x 3.4
OpenCV 2.4.10

OpenCVライブラリの入手

最新版をDL

http://opencv.org/downloads.html
2015.02.16 時点で安定板は 2.4.10 “OpenCV for Android” をクリック
OpenCV-2.4.10-android-sdk.zip

テストプロジェクトを作って使ってみる

プロジェクト作成

cocos2d-x Ver3.4をつかいます

ln -s ./cocos2d-x-3.4 ./cocos2d-x

Cococs2d-x プロジェクト生成 HelloOpenCV

cd ./cocos2d-x
cocos new HelloOpenCV -p net.szmake.HelloOpenCV -l cpp -d ~/SpDev/ProjCocos2dxV3.4/

Eclipseから開く

Import > Android > Existing Android Code Into Workspace
ImportProjectダイアログが開く
 RootDirectory[Browse…]ボタンからさきほど作成した
 ~/SpDev/ProjCocos2dxV3.4/HelloOpenCV/proj.android
 ~/SpDev/rojCocos2dxV3.4/HelloOpenCV/SandBox/cocos2d/cocos/platform/android/java

とりあえず空の状態で初期実行して正常に動く事を確認。(実機でcocos2dx宇宙人が表示される)

テストアプリ:ライブラリコールしてみる

OpenCVライブラリが使えるか確認。
簡単なサンプルとして、CCSpriteを白黒変換して表示してみます。
/HelloOpenCV/proj.android/ の下に
OpenCV-2.4.10-android-sdk.zip
を解凍した
OpenCV-2.4.10-android-sdk ディレクトリをコピー
(EcclipseのPackageExplorerでrefleshすると、HelloOpenCVの配下にOpenCV-2.4.10-android-sdkが出てくる)

Classes/HelloWorldScene.h の編集

行頭でopencv のヘッダーファイルインクルード

テスト確認用のクラス・メソッドを追加

Classes/HelloWorldScene.cpp の編集

OpenCV内では画像データはcv::Mat形式で扱われるので
CCSprite<-->cv::Matの 変換ルーチンが必要。下記ルーチンを自作しました。

  • HelloWorld::init()関数内にCCSpriteとラベルのボタンを配置

ラベルリンク、タップ時のコールバック

Android.mk の編集(重要ポイント)

/HelloOpenCV/proj.android/jni/Android.mk を修正

(編集前)


(編集後)

(編集前)


(編集後)

Application.mk の編集(重要ポイント)

/HelloOpenCV/proj.android/jni/Application.mk を修正

(編集前)


(編集後)

コンパイル成功。
無事動きました。

関連記事

OpenCV+cocos2d-x 環境構築(iOS編)

One comment on “OpenCV+cocos2d-x 環境構築(Android編)

  1. The code is simple and is essentially straight from this tutorial.
    When i build folow this tutorial, i’ve bug
    Please, help me fix bug!
    Thanks!

    jni/include/OpenCV/sdk/native/jni/include/opencv2/core/mat.hpp:125: error: undefined reference to ‘cv::Mat::copySize(cv::Mat const&)’
    jni/include/OpenCV/sdk/native/jni/include/opencv2/core/mat.hpp:278: error: undefined reference to ‘cv::fastFree(void*)’
    jni/include/OpenCV/sdk/native/jni/include/opencv2/core/mat.hpp:353: error: undefined reference to ‘cv::Mat::create(int, int const*, int)’
    jni/include/OpenCV/sdk/native/jni/include/opencv2/core/mat.hpp:367: error: undefined reference to ‘cv::Mat::deallocate()’
    jni/../../Classes/HelloWorldScene.cpp:39: error: undefined reference to ‘cv::_OutputArray::_OutputArray(cv::Mat&)’
    jni/../../Classes/HelloWorldScene.cpp:39: error: undefined reference to ‘cv::_InputArray::_InputArray(cv::Mat const&)’
    jni/../../Classes/HelloWorldScene.cpp:39: error: undefined reference to ‘cv::cvtColor(cv::_InputArray const&, cv::_OutputArray const&, int, int)’
    collect2: error: ld returned 1 exit status
    make: *** [obj/local/x86/libcocos2dcpp.so] Error 1
    make: Leaving directory `/Users/khaipham/Desktop/OpenCV/OpenCV2DX/proj.android’
    Error running command, return code: 2.
    Traceback (most recent call last):
    File “./build_native.py”, line 43, in
    build(opts.build_mode)
    File “./build_native.py”, line 28, in build
    raise Exception(“Build dynamic library for project [ ” + app_android_root + ” ] fails!”)
    Exception: Build dynamic library for project [ /Users/khaipham/Desktop/OpenCV/OpenCV2DX/proj.android/../ ] fails!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

JavaScriptを有効にしてください。
あるいは下記手順で投稿できます。
1.「トークンコード取得」を押すと枠内にトークンコードが表示されます
2.表示されたトークン文字を「投稿確認トークン入力」へ入力します

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">