我将 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 类都在 这里。
我应该怎么做才能消除错误?
原文由 Pial Kanti 发布,翻译遵循 CC BY-SA 4.0 许可协议
我已成功消除错误,并且我的应用程序在执行此行时不会崩溃
imageMat=new Mat();
错误的原因是 Android 在加载 OpenCV4Android 库之前调用了 “onCreate” 方法。所以我使用了 OpenCVManager 的 OpenCV 异步初始化。我在 onCreate 方法之前创建了 BaseLoaderCallback 。在里面我已经声明了 new Mat() 是这样的:
然后在 onResume() 中,我检查了 OpenCV 库是否已从当前应用程序包中加载和初始化。代码如下:
我的错误消失了。我的完整更新的 java 类在 这里。
参考链接: