虽然在OpenCV官网上有如何在Android中使用OpenCV库的文章,但是按照那个文章来根本没法成功调入OpenCV库。因此特撰写此文给出正确的挂载库的方法和挂载OpenCVManager时,函数调用的顺序。
首先本文不讨论如何通过static静态块的方法挂载OpenCV库(因为这个方法我没有成功),讨论的是通过实现 CvCameraViewListener 接口同步挂载OpenCV库,这也是OpenCV官网上推荐的做法:
通过此方法挂载的步骤为:
- 实现CvCameraViewListener 需要实现的虚函数,Eclipse中可以自动补全需要实现的虚函数。
- 定义BaseLoaderCallback回调函数接口,并实现这个类中的onManagerConnected()方法
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) { @Override public void onManagerConnected(int status) { switch (status) { case LoaderCallbackInterface.SUCCESS: { System.out.println("OpenCV loaded successfully"); } break; default: { System.out.println("OpenCV loaded Failed!"); super.onManagerConnected(status); } break; } } };
- 覆写Activity中的OnResume方法,在调用默认OnResume后进行OpenCV库的同步挂载(2.4.5版本)
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_5, this, mLoaderCallback);
- 至此实现了OpenCV库的挂载,关键的问题来了,在OnCreate函数中不能使用OpenCV库相关的类和方法,因为此时OpenCV库还没有挂载上去!即使把initAsync方法放到OnCreate中也不行!博主在这里卡了很久通过各种调试才发现这个问题。可以使用Handler的方法延迟新的线程的启动以等待OpenCV库的加载