No implementation found for long org.opencv.core.Mat.n_Mat() 错误使用 OpenCV
Posted
技术标签:
【中文标题】No implementation found for long org.opencv.core.Mat.n_Mat() 错误使用 OpenCV【英文标题】:No implementation found for long org.opencv.core.Mat.n_Mat() error Using OpenCV 【发布时间】:2016-05-07 13:28:02 【问题描述】:我正在为adaptiveThreshold
使用 OpenCV。我使用 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。
我应该怎么做才能消除错误?
【问题讨论】:
【参考方案1】:我已经成功消除了错误并且我的应用在执行这行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。
参考链接:
-
Async Initialization of OpenCV on Android using OpenCVManager
Tutorial1Activity.java
【讨论】:
不错的解决方案...帮了我很多 我真的需要帮助解决这个问题,你能帮帮我吗? ***.com/questions/61216402/…【参考方案2】:在您的活动中初始化 openCV 库 在 onCreate() 方法之前添加这段代码
static
if (!OpenCVLoader.initDebug())
// Handle initialization error
在你的项目中添加这个库:https://github.com/hschott/Camdroid
【讨论】:
【参考方案3】:也许您忘记包含 openCV 库。
包括
static
System.loadLibrary("opencv_java");
对于 OpenCV 版本 3,您应该添加:
static
System.loadLibrary("opencv_java3");
祝你好运:)
【讨论】:
这对我有用。感谢 Siddharth Bhatheja! 我应该在我的活动课程中使用此代码吗? Kotlin 的等效代码是什么?【参考方案4】:我将这一行放在 onCreate 方法上,并确保安装了 openCvManager。这对我来说很好。
OpenCVLoader.initDebug();
【讨论】:
【参考方案5】:使用它来解决错误。
public class MainActivity : Activity
Mat m;
Mat grayM;
ImageView imageView;
public MainActivity()
if (!OpenCVLoader.InitDebug())
System.Console.WriteLine("GG");
【讨论】:
【参考方案6】:这对我有用:
确保在链接模块依赖项时将 native/libs opencv 中的文件复制到项目中的 jniLibs 目录,然后在 build.gradle(app) 构建中设置以下内容。
sourceSets
main
jni
srcDirs 'src/main/jni', 'src/main/jniLibs'
然后将此添加到您的主要活动中
OpenCVLoader.initDebug()
【讨论】:
以上是关于No implementation found for long org.opencv.core.Mat.n_Mat() 错误使用 OpenCV的主要内容,如果未能解决你的问题,请参考以下文章
Android error--No implementation found for native Lcomd
Androidjava.lang.UnsatisfiedLinkError: No implementation found for void xx xx xx -- 问题解决
尝试将 Json 存储在 DB 中时,Ebean 'No service implementation found for SpiJsonService'
005android初级篇之jni 一个简单的报错No implementation found for
jni/ndk问题 :引用so库报错: java.lang.UnsatisfiedLinkError: No implementation found for
Android Telegram App --> java.lang.UnsatisfiedLinkError: No implementation found for void