我正在将OpenCV用于 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);
但是在声明 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类是here。
如何消除错误?
答案 0 :(得分:40)
我已成功消除错误,我的应用在执行此行imageMat=new Mat();
错误的原因是Android在加载OpenCV4Android库之前调用“onCreate”方法。所以我使用 OpenCVManager 使用了OpenCV的异步初始化。我在 onCreate 方法之前创建了 BaseLoaderCallback 。在内部,我已经声明 new 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;
}
}
};
然后在 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);
}
}
我的错误消失了。我完整更新的java类是here。
参考链接:
答案 1 :(得分:6)
Initialize openCV library in your activity add this code before onCreate() method
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
}
}
add this lib in your project : https://github.com/hschott/Camdroid
答案 2 :(得分:4)
我将此行放在onCreate方法上,并确保已安装openCvManager。这对我来说很好。
OpenCVLoader.initDebug();
答案 3 :(得分:1)
使用它来解决错误。
var result = pathname.substring(pathname.lastIndexOf("/") + 1);
答案 4 :(得分:0)
也许您忘记了包含openCV库。
包含
static {
System.loadLibrary("opencv_java");
}
对于OpenCV版本3,您应该添加:
static {
System.loadLibrary("opencv_java3");
}
祝你好运:)
答案 5 :(得分:-1)
任何在Android中通过 openvc4 遇到上述问题的人都尝试this,并评论是否有帮助。
需要一些重命名操作才能使其正常工作。