簡體   English   中英

OpenCV + Java = UnsatisfiedLinkError

[英]OpenCV + Java = UnsatisfiedLinkError

我需要從我的 USB 網絡攝像頭捕獲視頻流,為此我使用 Opencv 2.4.6 進行 Java 開發。 我按照此處列出的步驟操作

我將“C:\\opencv\\build\\java\\x64”目錄添加到我的系統路徑中,並將“opencv-246.jar”文件包含到我在 ECLIPSE 上的庫中。 當你運行這個解釋

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。

請幫我!

在你的第二個例子中,你跳過了這一行

 System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

所以opencv庫沒有加載,UnsatisfiedLinkError等......

[編輯]:

感謝@Jishnu Prathap 突出顯示 java.library 路徑問題,如果您在設置時遇到問題,您仍然可以嘗試使用 java 包裝器 so/dll/dylib 的絕對路徑,例如:

 System.load("/path to/our/java_wrapper");

我在使用 OpenCV 和 java 時遇到了類似的錯誤。我做了兩件事來解決它。

  1. static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
  2. 我將 OpenCV dll 或 .so 的路徑添加到 javalibpath 或路徑。 這實際上由於某種原因不起作用,我最終將OpenCV dll 放在 system32 文件夾中

對於使用 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)

試試下面的代碼

導入 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() );
   }

}

所以,我也遇到了這個問題,我按照你們的建議做了,它在我的 x64 窗口中運行良好,但在 x86 中無法正常工作。

最后我通過更改找到了解決方案:

VideoCapture capture = new VideoCapture(0);

為了

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

我不知道為什么這行得通,但我希望它可以幫助解決我同樣問題的人。

我在網上嘗試了很多教程來解決這個問題,只有其中一個對我有幫助。 這種方法有兩個不同的步驟,

首先,在將 Java 項目從 Opencv SDK 導入 Android Studio 時,確保取消選中導入對話框中顯示的所有復選框

其次,請確保您導入了 SDK 的 native/jdk 中的OpenCV.mk文件。

System.loadLibrary() 似乎在此之后返回 true,這對我來說是一個巨大的解脫,因為我花了幾個小時才弄清楚這一點

這是幫助我的教程的鏈接https://medium.com/@rdeep/android-opencv-integration-without-opencv-manager-c259ef14e73b

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM