【问题标题】:UnsatisfiedLinkError using opencv for processingUnsatisfiedLinkError 使用 opencv 进行处理
【发布时间】:2017-06-12 13:31:26
【问题描述】:

我在打电话:

Mat opencv_K= new Mat(3, 3, CvType.CV_32F);

Processing 草图中,我收到以下错误:

java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(III)J
    at processing.opengl.PSurfaceJOGL$2.run(PSurfaceJOGL.java:480)
    at java.lang.Thread.run(Thread.java:745)
UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(III)J
A library relies on native code that's not available.
Or only works properly when the sketch is run as a 32-bit application.

在我看来,此错误与报告的 here 不同。

一个最小的例子是:

import processing.core.PVector;
import org.opencv.core.Mat;
import org.opencv.core.CvType; 
import org.opencv.core.Core;
Mat opencv_K= new Mat(3, 3, CvType.CV_32F); 

而且这种情况下的错误有点类似:

UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat(III)J
A library relies on native code that's not available.
Or only works properly when the sketch is run as a 32-bit application.

我在 Ubuntu 平台上使用 Processing 3。

【问题讨论】:

    标签: opencv processing


    【解决方案1】:

    解决办法:

    只需在相关代码前加上System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

    【讨论】:

      【解决方案2】:

      我建议试试 Greg 的OpenCV for Processing library

      import gab.opencv.*;
      
      import processing.core.PVector;
      import org.opencv.core.Mat;
      import org.opencv.core.CvType; 
      import org.opencv.core.Core;
      Mat opencv_K; 
      
      OpenCV opencv;
      
      void setup(){
        opencv = new OpenCV(this,640,480);
        opencv_K = new Mat(3, 3, CvType.CV_32F);
        println(opencv_K);
      }
      

      控制台输出:

      OpenCV for Processing 0.5.2 by Greg Borenstein http://gregborenstein.com
      Using Java OpenCV 2.4.5.0
      Mat [ 3*3*CV_32FC1, isCont=true, isSubmat=false, nativeObj=0x7fb86157f080, dataAddr=0x7fb861589e90 ]
      

      【讨论】:

      • 有什么理由推荐它?
      • 优点:超级容易设置(Sketch > Import Library > Add Library > OpenCV for Processing),易于访问 OpenCV 功能(最小/最大亮度/面部检测/背景减法等),OpenCV 到处理和反向转换(Mat<->PImagePoint<->PVector 等)附带用于常见操作系统的预编译库缺点:当前使用 OpenCV 2.4.5.0(需要手动更新如果需要更新的函数),在更复杂的任务上,跳过大部分包装代码并在开始时将 PImage 转换为 Mat ,使用典型的 Java OpenCV API 处理,然后再转换回来更容易。
      【解决方案3】:

      对我来说,它只需在开始时初始化 OpenCV 对象就可以工作,而在使用 Mat 之前我还没有这样做,例如opencv = new OpenCV(this,500,500);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-01
        • 1970-01-01
        • 2015-12-22
        • 2014-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多