[英]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 時遇到了類似的錯誤。我做了兩件事來解決它。
static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
對於使用 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.