我正在使用OpenCV for adaptiveThreshold.我使用OpenCV进行图像处理的代码如下:
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);
Run Code Online (Sandbox Code Playgroud)
但是我在宣布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)
Run Code Online (Sandbox Code Playgroud)
作为OpenCV的新手,我并不清楚错误.这段代码所属的整个java类都在这里.
我该怎么做才能消除错误?
Pia*_*nti 48
我已成功消除错误,我的应用程序在执行此行时不会崩溃 imageMat=new Mat();
出错的原因是Android 在加载OpenCV4Android库之前调用了"onCreate"方法.所以我使用OpenCVManager使用了OpenCV的异步初始化.我在onCreate方法之前创建了BaseLoaderCallback.在里面,我已经宣布了新的Mat():
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;
}
}
};
Run Code Online (Sandbox Code Playgroud)
然后在onResume()中,我检查了OpenCV库是否已从当前应用程序包中加载和初始化.代码如下:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
我的错误消失了.我的完整更新的java类就在这里.
参考链接:
在您的活动中初始化openCV库,在onCreate()方法之前添加此代码
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
}
}
Run Code Online (Sandbox Code Playgroud)
在您的项目中添加此lib:https://github.com/hschott/Camdroid
也许您忘记包含 openCV 库。
包括
static {
System.loadLibrary("opencv_java");
}
Run Code Online (Sandbox Code Playgroud)
对于 OpenCV 版本 3,您应该添加:
static {
System.loadLibrary("opencv_java3");
}
Run Code Online (Sandbox Code Playgroud)
祝你好运 :)
归档时间: |
|
查看次数: |
27733 次 |
最近记录: |