使用OpenCV找不到长期org.opencv.core.Mat.n_Mat()错误的实现 [英] No implementation found for long org.opencv.core.Mat.n_Mat() error Using OpenCV
问题描述
我正在将OpenCV用于adaptiveThreshold
.我使用OpenCV进行图像处理的代码如下:
I am using OpenCV for adaptiveThreshold
. My code for image processing using OpenCV is like this:
imageMat=new Mat();
Utils.bitmapToMat(bmp, imageMat);
Imgproc.cvtColor(imageMat, imageMat, Imgproc.COLOR_BGR2GRAY);
Imgproc.GaussianBlur(imageMat, imageMat, new Size(3, 3), 0);
Imgproc.adaptiveThreshold(imageMat, imageMat, 255,Imgproc.ADAPTIVE_THRESH_MEAN_C, Imgproc.THRESH_BINARY_INV, 5, 4);
但是在声明Mat
时出现错误:
But I am getting an error while declaring Mat
:
No implementation found for long org.opencv.core.Mat.n_Mat() (tried Java_org_opencv_core_Mat_n_1Mat and Java_org_opencv_core_Mat_n_1Mat__)
at org.opencv.core.Mat.n_Mat(Native Method)
at org.opencv.core.Mat.<init>(Mat.java:24)
at com.example.pial_pc.instantbookreview.ImageCapture$3.onPictureTaken(ImageCapture.java:105)
由于我是OpenCV的新手,所以我不太清楚该错误.此代码所属的整个Java类位于此处.
As I'm new to OpenCV, I am not clearly understanding the error. The entire Java class where this code belongs is here.
该如何消除错误?
推荐答案
我已经成功消除了错误,并且执行此行imageMat=new Mat();
I have successfully eliminate the error and my app does not crash while executing this line imageMat=new Mat();
错误的原因是Android在加载OpenCV4Android库之前调用了"onCreate" 方法.因此,我使用 OpenCVManager 使用了OpenCV的异步初始化.我在 onCreate 方法之前创建了 BaseLoaderCallback .在其中,我这样声明了新Mat():
The reason for the error is that Android calls the "onCreate" method before loading the OpenCV4Android library.So i have used Async Initialization of OpenCV using OpenCVManager. I have created BaseLoaderCallback before onCreate method. And inside that i have declared new Mat() like this:
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i("OpenCV", "OpenCV loaded successfully");
imageMat=new Mat();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
然后在 onResume()中,我检查了是否已从当前应用程序包中加载并初始化了OpenCV库.代码如下:
Then in onResume() i have checked if OpenCV library have been loaded and initialized from within current application package or not. The codes are as follows:
public void onResume()
{
super.onResume();
if (!OpenCVLoader.initDebug()) {
Log.d("OpenCV", "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
} else {
Log.d("OpenCV", "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
}
我的错误消失了.我完整更新的Java类是此处.
And my error is gone. My full updated java class is here.
参考链接:
- Async Initialization of OpenCV on Android using OpenCVManager
- Tutorial1Activity.java
这篇关于使用OpenCV找不到长期org.opencv.core.Mat.n_Mat()错误的实现的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!