我刚开始在MacOSX下使用JavaCV。我使用最新来源的CMake编译了OpenCV,并将库所在的路径放入-Djava.library.path=pathtolibraries
JVM参数中,并在我的项目设置中添加了JavaCV库。我还尝试了其他几种Classpath变体。但当我启动一个简单的项目,只从我的网络摄像头中获取一张图像时,我会出现以下错误:
Exception in thread "Thread-3" java.lang.UnsatisfiedLinkError: no jnivideoInputLib in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1045)
at com.googlecode.javacpp.Loader.load(Loader.java:358)
at com.googlecode.javacpp.Loader.load(Loader.java:285)
at com.googlecode.javacv.cpp.videoInputLib.<clinit>(videoInputLib.java:80)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.googlecode.javacpp.Loader.load(Loader.java:305)
at com.googlecode.javacpp.Loader.load(Loader.java:285)
at com.googlecode.javacv.cpp.videoInputLib$videoInput.<clinit>(videoInputLib.java:192)
at com.googlecode.javacv.VideoInputFrameGrabber.start(VideoInputFrameGrabber.java:89)
at webcampong.Grabber.run(Grabber.java:35)
at java.lang.Thread.run(Thread.java:680)
这是由于openCV和javaCV库的兼容性问题。尝试下载兼容的openCV库(包含bin文件夹)。
VideoInputFrameGrabber仅在Windows下工作。
如JavaCV的README.txt所述:
- 使用DirectShow捕获新的
videoInputLib
包装和相应的VideoInputFrameGrabber
,在Windows 7下很有用,其中OpenCV和FFmpeg可能无法使用Windows视频捕获(问题#58)
我使用javacpp和视频输入来操作相机。当我调用"videoInput.listDevices()"时,我得到了错误"java.lang.UnsisfiedLinkError:java.library.path中没有jnivideoInputLib"。我通过添加以下代码来解决问题:
org.bytedeco.javacpp.Loader.load(org.bytedeco.javacpp.opencv_highgui.class);
System.out.println(videoInput.listDevices());
在调用其他方法之前,必须先调用Loader.load,我不知道为什么。