在Android Java应用程序中使用OpenCV Mat.OpenCV Mat出现NoClassDefFound错误
Use OpenCV Mat in Android Java Application. NoClassDefFound Error with OpenCV Mat
我正在用java开发一个Android应用程序,它调用本地c库中的一个函数。本机函数需要一个指向Opencv-Mat类型的指针,因此我需要能够在我的Java应用程序中创建一个Opencv-Mat类型以传递给本机库。
我使用的是安卓工作室,我已经将"opencv库".jar文件添加到了我项目的libs文件夹中。因此,我可以导入所需的Opencv模块,并创建一个Opencv-Mat类型/访问其函数。问题是在运行时我得到以下错误:
java.lang.NoClassDefFoundError: org.opencv.core.Mat
我读到Opencv.jar文件只是一个围绕本机功能的包装器,应用程序需要"本机库"。如何查找/添加此项?我需要向我的项目添加什么,以便应用程序可以在运行时找到Opencv-Mat类定义?我只想使用OpenCV Mat类型,而不想使用其他类型。
我读过关于设置OpenCV Android的教程,但这些教程需要在Android设备上安装OpenCV Manager应用程序,但这对我来说可能是个问题,因为我无法访问将安装我的应用程序的设备,而且OpenCV Manager应用程序也不会安装在这些设备上。相反,是否只有一个".so"库,我可以添加到我的Android Studio项目中,它将与我的项目捆绑在一起,并允许应用程序在运行时找到所需的Mat类,这就是我所需要的全部?
提前谢谢。
有三种方法可以将OpenCV包含在应用中
- 使用NDK编译opencv并编写自己的包装器以包含opencv c++代码
- 导入Android OpenCV SDK提供的OpenCV java包装器模块,并将其连接到手机上安装的OpenCV manager
- 导入Android OpenCV SDK提供的OpenCV java包装器模块,并复制项目中的本地库
对于选项1,您必须设置ndk项目。对于2,3,您可以简单地导入opencv android模块,并通过调用-在代码中初始化它
if(!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization.");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package using it.");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
请参阅以下链接,在您的android工作室项目-中设置opencv android sdk
http://blog.codeonion.com/2015/11/25/creating-a-new-opencv-project-in-android-studio/
Android Studio 中的OpenCV
大多数opencv功能都可以使用java包装器直接访问。因此,您可能不需要将任何Mat传递给本机C函数。如果您仍然想调用本机函数,可以参考Opencv Java包装器以获得帮助,甚至可以参考SDK提供的示例以进一步了解。
- C++中的openCV Mat访问冲突
- OpenCV 和从 OutputArrays 或 (Mat) 读取数据
- 为什么用cv::Mat(opencv)更改指向数据的指针与cv::filter2D有问题
- 在Android Java应用程序中使用OpenCV Mat.OpenCV Mat出现NoClassDefFound错误
- 在MFC图片框中显示IPLimage/ MAT (opencv)
- 不完整的类型 "cv::Mat" opencv c++
- 从NumPy数组到Mat(OpenCV)的C++转换
- 从Mat(OpenCV)生成具有透明度的PNG
- 将2个Mat的内容添加到另一个Mat opencv c++中
- Mat& vs Mat opencv 2 c++
- 堆损坏错误;无法发布 cv::Mat opencv
- 在矢量到矢量中复制数据<float> <Mat> (Opencv/C++)
- 将矢量保存在Mat opencv中
- 如何将使用Qt Paint Application绘制的图像传输到Mat openCV
- 如何在<Mat>opencv c++中有效地清除向量
- 我可以确定cv::Mat Opencv中的频道数量吗
- Mat OpenCv的赋值错误
- 使用Mat OpenCV访问像素
- 如何在不同的线程中将图像数据从BitmapSource(WPF)复制到C++/CLI中的cv::Mat(OpenCV)
- 计算 Mat OpenCV 子集的总和