当前位置: 首页 > 面试题库 >

Java openCV-将位图转换为Mat时出错

涂煌
2023-03-14
问题内容

我正在使用Java openCV,并且尝试加载照片并运行与之匹配的模板。模板匹配方法处理Mat对象,因此我需要加载图像并将其转换为Mat。

我这样做的方式是:

Bitmap i = BitmapFactory.decodeFile("/sdcard/TVguide/Detection/detected.jpg");
image = Utils.bitmapToMat(i);

这样,我从Android SD卡加载了一张照片,并尝试使用openCV方法bitmapToMat将其转换为Mat对象。问题是在转换时,应用程序崩溃。

这是LogCat:

            03-14 15:15:57.636: W/dalvikvm(1059): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/opencv/android/Utils;
            03-14 15:15:57.636: D/AndroidRuntime(1059): Shutting down VM
            03-14 15:15:57.636: W/dalvikvm(1059): threadid=1: thread exiting with uncaught exception (group=0x40015578)
            03-14 15:15:57.640: E/AndroidRuntime(1059): FATAL EXCEPTION: main
            03-14 15:15:57.640: E/AndroidRuntime(1059): java.lang.ExceptionInInitializerError
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at com.marakana.Preview$3.onPictureTaken(Preview.java:191)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at android.hardware.Camera$EventHandler.handleMessage(Camera.java:565)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at android.os.Handler.dispatchMessage(Handler.java:99)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at android.os.Looper.loop(Looper.java:123)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at android.app.ActivityThread.main(ActivityThread.java:3687)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at java.lang.reflect.Method.invokeNative(Native Method)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at java.lang.reflect.Method.invoke(Method.java:507)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at dalvik.system.NativeStart.main(Native Method)
            03-14 15:15:57.640: E/AndroidRuntime(1059): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load opencv_java: findLibrary returned null
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at java.lang.Runtime.loadLibrary(Runtime.java:429)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at java.lang.System.loadLibrary(System.java:554)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     at org.opencv.android.Utils.<clinit>(Utils.java:86)
            03-14 15:15:57.640: E/AndroidRuntime(1059):     ... 10 more
            03-14 15:16:03.472: I/Process(1059): Sending signal. PID: 1059 SIG: 9

我不知道我做错了什么,还是只是有问题的openCV。

谢谢Eyal


问题答案:

您需要将位图转换为RGBA格式:

Bitmap bmp32 = i.copy(Bitmap.Config.ARGB_8888, true);

实际上,这是Android-
OpenCV用户组上讨论最多的问题:https :
//groups.google.com/group/android-
opencv/


此问题的修复程序已在OpenCV干线中提供,并将包含在OpenCV的下一版本中。

您也可以使用OpenCV API读取图像:

Mat image = Highgui.imread("/sdcard/TVguide/Detection/detected.jpg");


 类似资料:
  • 我想把openCV Mat文件转换成GDI+位图图像。我找不到任何关于如何做到这一点的信息?

  • 问题内容: 如何将a转换为in ? 我正在使用JAVA包装器(不是 JavaCV )。由于我是新手,因此在理解工作方式方面存在一些问题。 我想做这样的事情。(根据Ted W.的回复): 这行不通。只是一张尺寸正确的黑色图片。 问题答案: 我还试图做同样的事情,因为需要将经过处理的图像与两个库结合在一起。而我一直试图做的是把中,而不是RGB值。而且有效!所以我做的是: 1,转换为字节数组 2.然后,

  • 我有C/C++源代码(在Windows上运行良好)将输入帧转换为新帧。 > 将byte[]帧从Java转换为JNI jarrayByte 将jarrayByte转换为Jyte* 从JByte*创建新的cv::mat原始代码* } 我的Java代码:

  • 问题内容: 我将输入流从Web转换为位图时遇到问题。仅当输入图像类型为.BMP(位图)时,才会出现问题。在这种情况下: bitmapFactory.decodeStream返回null 。 有什么提示如何解决此问题,或者应该在哪里继续调试? 平台:Android(蜂窝) 问题答案: 谢谢@Amir指出日志。发现了一条线: 这似乎是一个普遍的问题。进行搜索后,我找到了解决方案。 我以前的代码: 起作

  • 我最近在eclipse上使用java中的openCV,正在开发一个眼球跟踪软件,我正在使用其他人创建的基本代码,并计划对其进行tweek,但在几行代码中出现错误,无法找出原因。这是全班同学 错误从这里开始,错误代码为:“构造函数大小(double,double,int,int,Scalar)未定义” 然后在ellipse这里我得到一个错误:“类型核中的方法ellipse(Mat,RotatedRe

  • Iam试图将base64转换为image,并将image数据传递给jQuery,但在数据表中置位时,它不显示image。因为to jQuery映像无法运行