【发布时间】:2026-02-14 15:10:02
【问题描述】:
我正在学习开发 android 应用程序,我正在尝试将 OpenCV 整合到应用程序中。我决定制作一个显示图像的简单应用程序。代码如下:
package com.example.first;
import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewFrame;
import org.opencv.android.CameraBridgeViewBase.CvCameraViewListener2;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.Canvas;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceView;
import android.view.WindowManager;
import android.webkit.WebView.FindListener;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends Activity{
Mat m=Highgui.imread("C:/Users/Administrator/Desktop/circle1.png");
}
在检查 logcat 时显示以下错误:
E/AndroidRuntime(1310):致命异常:主要
E/AndroidRuntime(1310): java.lang.UnsatisfiedLinkError: Native 方法 未找到:org.opencv.highgui.Highgui.imread_1:(Ljava/lang/String;)
E/AndroidRuntime(1310):在 org.opencv.highgui.Highgui.imread_1(Native 方法)
E/AndroidRuntime(1310): 在 org.opencv.highgui.Highgui.imread(Highgui.java:359)
E/AndroidRuntime(1310): 在 com.example.run.MainActivity.(MainActivity.java:26)
E/AndroidRuntime(1310): 在 java.lang.Class.newInstanceImpl(Native 方法)
E/AndroidRuntime(1310): 在 java.lang.Class.newInstance(Class.java:1130)
E/AndroidRuntime(1310): 在 android.app.Instrumentation.newActivity(Instrumentation.java:1061)
E/AndroidRuntime(1310): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2128)
E/AndroidRuntime(1310): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
E/AndroidRuntime(1310): 在 android.app.ActivityThread.access$600(ActivityThread.java:141)
E/AndroidRuntime(1310): 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
E/AndroidRuntime(1310): 在 android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(1310): 在 android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(1310): 在 android.app.ActivityThread.main(ActivityThread.java:5103)
E/AndroidRuntime(1310): 在 java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(1310): 在 java.lang.reflect.Method.invoke(Method.java:525)
E/AndroidRuntime(1310): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
E/AndroidRuntime(1310): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
E/AndroidRuntime(1310): 在 dalvik.system.NativeStart.main(Native 方法)
这段代码有什么问题?
【问题讨论】:
-
你能让一个 hello-world 应用显示图像吗? (比如说,* 的标志?)
-
@18446744073709551615 在activity_main.xml文件中,当我在图形布局中查看它时,我可以看到图像,但是当我在模拟器上运行它时它不显示图像。
-
如果您无法编写显示图像的应用程序,这是一个不同的问题,与 opencv 无关。 (欢迎您在 Google 上搜索示例或在此处询问您是否遇到了其他人没有遇到过的问题。)一旦您设法显示图像,您必须将 Mat 转换为 Android 本身可以理解的东西(例如,制作一个位图可绘制,或将 Mat 保存为 png)并显示它。
-
@18446744073709551615 检查了logcat中的错误,它说找不到函数imread()。所以它似乎与OpenCV有关。