OpenCV1.1の準備
3.OpenCV 1.1pre1 のソースコードをダウンロードして適当なところに展開します。
4.フォルダの中にある、cvフォルダとcxcoreを、jniフォルダの中に移動させます。
5.Android.mkファイルを作成します。
Android.mkファイルの内容は下記のとおりです。
LOCAL_PATH:= $(call my-dir) ############## ## OpenCV ############## include $(CLEAR_VARS) #cxcore LOCAL_MODULE := cxcore #includeファイルの場所を指定 LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/cv/include \ $(LOCAL_PATH)/cxcore/include LOCAL_CFLAGS := $(LOCAL_C_INCLUDES:%=-I%) LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -ldl #ソースファイルを指定(cxcoreフォルダにあったソースを全部登録) LOCAL_SRC_FILES := \ cxcore/src/cxalloc.cpp \ cxcore/src/cxarithm.cpp \ cxcore/src/cxarray.cpp \ cxcore/src/cxcmp.cpp \ cxcore/src/cxconvert.cpp \ cxcore/src/cxcopy.cpp \ cxcore/src/cxdatastructs.cpp \ cxcore/src/cxdrawing.cpp \ cxcore/src/cxdxt.cpp \ cxcore/src/cxerror.cpp \ cxcore/src/cximage.cpp \ cxcore/src/cxjacobieigens.cpp \ cxcore/src/cxlogic.cpp \ cxcore/src/cxlut.cpp \ cxcore/src/cxmathfuncs.cpp \ cxcore/src/cxmatmul.cpp \ cxcore/src/cxmatrix.cpp \ cxcore/src/cxmean.cpp \ cxcore/src/cxmeansdv.cpp \ cxcore/src/cxminmaxloc.cpp \ cxcore/src/cxnorm.cpp \ cxcore/src/cxouttext.cpp \ cxcore/src/cxpersistence.cpp \ cxcore/src/cxprecomp.cpp \ cxcore/src/cxrand.cpp \ cxcore/src/cxsumpixels.cpp \ cxcore/src/cxsvd.cpp \ cxcore/src/cxswitcher.cpp \ cxcore/src/cxtables.cpp \ cxcore/src/cxutils.cpp include $(BUILD_STATIC_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := cv LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/cv/include \ $(LOCAL_PATH)/cxcore/include LOCAL_CFLAGS := $(LOCAL_C_INCLUDES:%=-I%) LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -ldl LOCAL_SRC_FILES := \ cv/src/cvaccum.cpp \ cv/src/cvadapthresh.cpp \ cv/src/cvapprox.cpp \ cv/src/cvcalccontrasthistogram.cpp \ cv/src/cvcalcimagehomography.cpp \ cv/src/cvcalibinit.cpp \ cv/src/cvcalibration.cpp \ cv/src/cvcamshift.cpp \ cv/src/cvcanny.cpp \ cv/src/cvcolor.cpp \ cv/src/cvcondens.cpp \ cv/src/cvcontours.cpp \ cv/src/cvcontourtree.cpp \ cv/src/cvconvhull.cpp \ cv/src/cvcorner.cpp \ cv/src/cvcornersubpix.cpp \ cv/src/cvderiv.cpp \ cv/src/cvdistransform.cpp \ cv/src/cvdominants.cpp \ cv/src/cvemd.cpp \ cv/src/cvfeatureselect.cpp \ cv/src/cvfilter.cpp \ cv/src/cvfloodfill.cpp \ cv/src/cvfundam.cpp \ cv/src/cvgeometry.cpp \ cv/src/cvhaar.cpp \ cv/src/cvhistogram.cpp \ cv/src/cvhough.cpp \ cv/src/cvimgwarp.cpp \ cv/src/cvinpaint.cpp \ cv/src/cvkalman.cpp \ cv/src/cvlinefit.cpp \ cv/src/cvlkpyramid.cpp \ cv/src/cvmatchcontours.cpp \ cv/src/cvmoments.cpp \ cv/src/cvmorph.cpp \ cv/src/cvmotempl.cpp \ cv/src/cvoptflowbm.cpp \ cv/src/cvoptflowhs.cpp \ cv/src/cvoptflowlk.cpp \ cv/src/cvpgh.cpp \ cv/src/cvposit.cpp \ cv/src/cvprecomp.cpp \ cv/src/cvpyramids.cpp \ cv/src/cvpyrsegmentation.cpp \ cv/src/cvrotcalipers.cpp \ cv/src/cvsamplers.cpp \ cv/src/cvsegmentation.cpp \ cv/src/cvshapedescr.cpp \ cv/src/cvsmooth.cpp \ cv/src/cvsnakes.cpp \ cv/src/cvstereobm.cpp \ cv/src/cvstereogc.cpp \ cv/src/cvsubdivision2d.cpp \ cv/src/cvsumpixels.cpp \ cv/src/cvsurf.cpp \ cv/src/cvswitcher.cpp \ cv/src/cvtables.cpp \ cv/src/cvtemplmatch.cpp \ cv/src/cvthresh.cpp \ cv/src/cvundistort.cpp \ cv/src/cvutils.cpp include $(BUILD_STATIC_LIBRARY) #################### ## 各プロジェクト用 ################### include $(CLEAR_VARS) LOCAL_MODULE := cvtest LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/cv/include \ $(LOCAL_PATH)/cxcore/include \ LOCAL_CFLAGS := $(LOCAL_C_INCLUDES:%=-I%) LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -ldl -llog \ -L$(TARGET_OUT) -lcxcore -lcv LOCAL_SRC_FILES := cvtest.cpp LOCAL_STATIC_LIBRARIES := cxcore cv include $(BUILD_SHARED_LIBRARY)
ライブラリのビルド
プロジェクトフォルダのトップに移動して、ndk-buildを実行します。
opencvのライブラリもビルドされるので、最初は5分〜10分かかりますが、
それ以後は数秒で終わります。
ライブラリのビルドが終わると、
.
.
Compile++ thumb : cv <= cvswitcher.cpp
Compile++ thumb : cv <= cvtables.cpp
Compile++ thumb : cv <= cvtemplmatch.cpp
Compile++ thumb : cv <= cvthresh.cpp
Compile++ thumb : cv <= cvundistort.cpp
Compile++ thumb : cv <= cvutils.cpp
StaticLibrary : libcv.a
SharedLibrary : libcvtest.so
Install : libcvtest.so => libs/armeabi/libcvtest.so
といった形でlibsフォルダにライブラリがコピーされ、Androidに組み込める状態になります。
あとはeclipseでプロジェクトを更新(F5キー)し、Androidプロジェクトを実行すればOKです。
ソースコード一式は、別館の方に保存してあります。
ではまた。
初めまして。rokuと申します。
返信削除最近OpenCVを勉強し始めました。Androidも開発も行っているのでこちらのコードを参考にさせていただいてAndroid上でopenCVを動かそうと思ったのですが、ライブラリのビルドがうまく通りません。。。
cannot find -lcxcore
とメッセージが出るのでmkファイルの150行目がひっかかっているのかと思うのですが、解決方法がわかりません。(TARGET_OUT の部分?)
もし原因がお分かりになりましたら教えていただけませんか?よろしくお願いいたします。
>>rokuさん
返信削除150行目の-L$(TARGET_OUT) -lcxcore -lcvは、
コンパイルしたライブラリの出力先(プロジェクトフォルダ/obj/local/armeabi/)にあるcxcoreとcvを読み込ませる命令となっています(たぶん)
(-Lはフォルダ、-lはライブラリを表します)
確認項目ですが、下記の3点をチェックしてみてください。
1.ライブラリ名はcxcoreとcvになっているか
2.ndk-buildを実行した際に、cxcore -> cv ->その他といった順番でコンパイルされているか
3.プロジェクトフォルダ/obj/local/armeabi に libcv.aやlibcxcore.aがあるか
はじめまして。みつ といいます。
返信削除私のところでもrokuさんと全く同じです。
>1.ライブラリ名はcxcoreとcvになっているか
これはどこかで確認できますでしょうか。
3 でlibcxcore.a libcv.a ができているのでOKと思っています。
>2.ndk-buildを実行した際に、cxcore -> cv ->その他といった順番でコンパイルされているか
>3.プロジェクトフォルダ/obj/local/armeabi に libcv.aやlibcxcore.aがあるか
これはあります。
検索してみても、「ライブラリがフォルダにないからロードするようにライブラリを配置」というような記述で、具体的に何をするかがいまいちです。
いったんオブジェクトを削除(クリーン)してからやってもダメでした。
>>みつ さん
返信削除cvとcxcoreを共有ライブラリでビルドする方式に変えたものを別館の方に保存しておきました。こちらのバージョンでビルドできるかをためしてみてください。
また、Android.mkファイルで使う変数については、下記ページを参照ください(私も参考にしてます)
Android NDK:kwLog
http://blog.makotokw.com/memo/android/android-ndk/
どうも、みつです。
返信削除結論から言うと、ライブラリの入れ替えなどをやったらビルドできました。
「など」と書いているのは、仕方なく?
OpenCV2.2 の環境設定を試してみたら、苦労したものの、そちらがうまくいって、その後に、1.1のほうもやってみたらうまくいったということです。
その際、NDK を r5b から、r4 の 標準でない?バージョンに入れ替えました。
(あと、r5b は C 直下においていましたが、
r4 は、気持ち悪かったですが推奨の cygwin/home/ユーザーの下に入れたので、そのあたりが関係していると思います)
2.2については以下のサイトを、
http://team-hiroq.com/blog/android/android_opencv_setup_environment.html
を参考にしました。
お手数おかけしました。