OpenCV + Java = UnsatisfiedLinkError
我需要从我的USB网络摄像头捕获video流,为此我使用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.(VideoCapture.java:113) at Main.main(Main.java:5)
我添加所有包含的路线:
C:\ OpenCV的\建设\ 64 \ VC10
一个接一个,但不起作用。
最后,我创建了一个名为OPENCV_DIR的变量,其中包含C:\ opencv \ build \ x64 \ _vc10但仍然获得UnsatisfiedLinkError。
请帮帮我!
在第二个例子中,你跳过了这一行
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
所以opencv libs没有加载,UnsatisfiedLinkError等…
[编辑]:
感谢@Jishnu Prathap突出显示java.library路径问题,如果遇到问题设置,你仍然可以尝试使用java包装器的绝对路径,所以/ dll / dylib就像:
System.load("/path to/our/java_wrapper");
在使用OpenCV和java时我遇到了类似的错误。我做了两件事来解决它。
-
static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
- 我将路径添加到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)
所以,我也遇到了这个问题,我做了你们所有的建议,它在我的x64窗口中运行良好,但在x86中无法使其正常工作。
最后我通过改变找到了一个解决方案:
VideoCapture capture = new VideoCapture(0);
对于
VideoCapture capture = new VideoCapture(); capture.open("resources/vid.MP4");
我不知道为什么会这样,但我希望它可以帮助我解决同样的问题。
请尝试以下代码
import org.opencv.core.CvType; import org.opencv.core.Mat;
import 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() ); }
}