在android模擬器上面執行OpenCV函式一閃就退出的解決方法
阿新 • • 發佈:2019-02-01
這幾天在練習一個在android上面進行圖片格式轉換的例子,我的開發環境是winXP+cygwin+openCV+NDK(r4 crystax),這個例子用openCV來做再合適不過了.在windows上面VS開發其實就下面這幾句程式碼:
IplImage* img = cvLoadImage(szOriPic);
cvSaveImage( szNewPic , img);
cvReleaseImage( &img );
在android上面做這個開發,需要用到ndk.openCV和NDK配置過程比較麻煩,csdn上面很多人的部落格上面都有介紹.配置完成之後,程式碼也寫好了.Android.mk檔案也仿造別人的寫好了,.so檔案也順利編譯出來了,開始在模擬器上面執行,結果程式一閃就退出了.如果去掉openCV函式的程式碼,程式可以正常執行.據此可以判斷問題就出現在openCV的函式上
面.Google出來的結果發現有人曾經遇到過這個問題,一種說法是在真機上面執行就不會出現這個問題,如果在模擬器上面就會出現這個問題.但是手頭上面沒有真機,所以這個方法無法驗證.
在google code中的android-opencv板塊中有人也出現了這個問題,其中有一個人的回答解決了我的問題.解決方法是需要在android.mk中新增下面的靜態庫:
參考URL:http://code.google.com/p/android-opencv/issues/detail?id=7(12樓和14樓的回答)
LOCAL_C_INCLUDES += $(OPENCV_INCLUDES) LOCAL_STATIC_LIBRARIES := calib3d features2d objdetect imgproc \ video highgui ml legacy core libopencv_lapack flann \ libzlib libpng libjpeg libjasper
這些庫需要從從C:\cygwin\home\user\trunk\opencv\obj\local\armeabi這個目錄中將這些.a靜態庫檔案copy 到自己程式的obj\local\armeabi目錄中去.這時再ndk-build,重新在模擬器上執行程式.(具體的目錄需要替換成自己的實際的opencv以及程式的目錄).這些靜態庫是以.a為副檔名的,而且openCV的版本不同,可能這些庫的名字也不同.做完以上改變,重新編譯我們的cpp檔案,然後重新build程式在模擬器上執行.這時一切都正常了
稍後會把這個圖片格式轉換的程式整理一下,把整個過程寫出來.轉載請註明出處:http://blog.csdn.net/fenghaibo00