您的位置:首页 > 移动开发 > Android开发

在android模拟器上面执行OpenCV函数一闪就退出的解决方法

2011-07-25 17:31 225 查看
这几天在练习一个在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出来的结果发现有人曾经遇到过这个问题,一种说法是在真机上面运行就不会出现这个问题,如果在模拟器上面就会出现这个问题.但是手头上面没有真机,所以这个方法无法验证.

继续找看有没有其他的方法,在http://blogold.chinaunix.net/u1/57901/showart_2512389.html这篇博文里面也提到了这个问题,而且给出了具体的解决方案,以下是这个解决方案的说明:"这时候编译出来的程序还不能在虚拟机中运行,一运行就会闪一下跳出来,这是因为opencv的android库中有V5和V7两种ARM架构的库,我发现一般都会优先运行V7架构的ARM库,但是虚拟机应该是个V5架构的,所以会马上退出,我的G2手机也一样,所以这时候还要对OpenCV-2.2.0/android/build/android-opencv.mk文件进行修改来让程序在V5架构的ARM上运行".但是这篇文章所讲的是在linux下解决方法,我并没有找到文中所提到的android-opencv.mk以及相关的.mk文件.所以这种方法最终还是没有解决我的问题.

在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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐