24

我需要从我的 USB 网络摄像头捕获视频流,为此我使用 Opencv 2.4.6 进行 Java 开发。我按照此处列出的步骤

我将“C:\opencv\build\java\x64”目录添加到我的系统路径中,并将“opencv-246.jar”文件包含到我在 ECLIPSE 上的库中。当你运行 explame

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

public class Main {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat m  = Mat.eye(3, 3, CvType.CV_8UC1);
        System.out.println("m = " + m.dump());
    }
}

我明白了

m = [1, 0, 0;
  0, 1, 0;
  0, 0, 1]

好的 =)

但是当我跑步时

import org.opencv.highgui.VideoCapture;

public class Main {
    public static void main(String[] args) {
        VideoCapture vc = new VideoCapture(0);
        if(vc.isOpened()){
            System.out.println("Works!");
        }
    }
}

我明白了

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.highgui.VideoCapture.n_VideoCapture(I)J
    at org.opencv.highgui.VideoCapture.n_VideoCapture(Native Method)
    at org.opencv.highgui.VideoCapture.<init>(VideoCapture.java:113)
    at Main.main(Main.java:5)

我添加了所有包含的路线:

C:\opencv\build\x64\vc10

一个一个,但不起作用。

最后,我使用 C:\opencv\build\x64\vc10 创建了一个名为 OPENCV_DIR 的变量,但仍然出现 UnsatisfiedLinkError。

请帮我!

4

6 回答 6

32

在你的第二个例子中,你跳过了这一行

 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

所以opencv库没有加载,UnsatisfiedLinkError等......

[编辑]:

感谢@Jishnu Prathap 强调了 java.library 路径问题,如果您在设置时遇到问题,您仍然可以尝试使用 java 包装器 so/dll/dylib 的绝对路径,例如:

 System.load("/path to/our/java_wrapper");
于 2013-09-05T07:20:14.997 回答
4

我在将 OpenCV 与 java 一起使用时遇到了类似的错误。我做了两件事来解决它。

  1. static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
  2. 我将 OpenCV dll 或 .so 的路径添加到 javalibpath 或路径。由于某种原因实际上没有工作,我最终将OpenCV dll 放在了 system32 文件夹中。
于 2015-05-23T18:52:49.513 回答
2

试试下面的代码

导入 org.opencv.core.CvType;导入 org.opencv.core.Mat;

导入 nu.pattern.OpenCV;

公共类 OpencvMain {

public static void main( String[] args )
   {

      OpenCV.loadLocally();
      Mat mat = Mat.eye( 3, 3, CvType.CV_8UC1 );
      System.out.println( "mat = " + mat.dump() );
   }

}

于 2018-05-30T05:32:33.187 回答
1

对于使用 opencv3.x 的普通用户:

对于 opencv 3.0 及更高版本,Java 中不再存在 HighGUI 模块。

import org.opencv.videoio.VideoCapture;

代替

import org.opencv.highgui.VideoCapture;

videoio 包括 VideoCapture、VideoWriter。

相似地:

imgcodecs 包括 imread/imwrite 和朋友

例子:

Highgui.imread(fileName)

-->

 Imgcodecs.imread(fileName)
于 2017-08-02T22:58:52.467 回答
0

我在网上尝试了很多教程来解决这个问题,只有一个对我有帮助。此方法有两个不同的步骤,

首先,在将 Java 项目从 Opencv SDK 导入 Android 工作室时,请确保取消选中导入对话框中显示的所有复选框

其次,确保导入 SDK 的 native/jdk 中的OpenCV.mk文件。

System.loadLibrary() 似乎在此之后返回 true,这对我来说是一个巨大的解脱,因为我花了几个小时才弄清楚这一点

这是帮助我的教程的链接 https://medium.com/@rdeep/android-opencv-integration-without-opencv-manager-c259ef14e73b

于 2021-01-21T16:51:29.847 回答
0

所以,我也遇到了这个问题,我按照你们的建议做了,它在我的 x64 窗口中运行良好,但在 x86 中无法正常工作。

最后我通过更改找到了解决方案:

VideoCapture capture = new VideoCapture(0);

为了

    VideoCapture capture = new VideoCapture();
    capture.open("resources/vid.MP4");

我不知道为什么会这样,但我希望它可以帮助解决我同样问题的人。

于 2015-12-16T20:27:33.747 回答