来自Maven的Java OpenCV
有没有办法从存储库中获取OpenCV? 我应该将哪个工件添加到pom.xml
? 我发现的每个教程都是从’14开始,看起来好像发生了变化 – 他们说它在官方的Maven存储库里还没有,但是我发现了一个条目:
nu.pattern opencv 2.4.9-7
可悲的是,我得到了错误
Caused by: java.lang.UnsatisfiedLinkError: no opencv_java249 in java.library.path
当我使用System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
。 我可以添加这个库,使我的项目包含它并“忘记”手动将其添加到类路径吗?
这对我有用。
nu.pattern.OpenCV.loadLibrary();
我正在使用以下maven依赖
nu.pattern opencv 2.4.9-4
在POM文件中添加以下依赖项:
org.openpnp opencv 3.2.0-0
并替换以下行:
System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
同
nu.pattern.OpenCV.loadShared();
这应该也解决了WINDOWS中的问题。 快乐的编码。
目前还没有正式的方法可以将OpenCV的官方Java绑定用作Maven依赖(正如评论中已经提到的,Maven工件已在#4588中被请求,但仍然无人值守)。 尽管如此,有三种可能的方法可以解决您的问题:
-
抛出了
java.lang.UnsatisfiedLinkError
,因为您需要单独安装绑定的二进制文件 (即“opencv_java”)。 最有可能的是,非官方工件不包括它们(或者不包括与您的系统兼容的工件)。 为了构建绑定:-
git clone
OpenCV存储库。 -
git checkout
预期的版本(看起来你使用的是2.4.9版本,虽然有更新版本可用) - 按照此处的说明构建OpenCV及其Java绑定,从而产生动态链接库(“opencv_java249.dll”,“libopencv_java249.so”或其他内容,具体取决于您的操作系统)。
- 将共享库文件复制到
java.library.path
(同样,此变量与系统相关,但可以在运行应用程序时定义)。 此时您应该准备好使用该工件。
-
-
另一种方法是使用其他绑定 : OpenCV的JavaCPP预设似乎与官方绑定一样好,并且这些预设在maven中注册(包括各种平台的二进制文件!)。 请记住,API可能不完全相同。
-
这个解决方案可能听起来太过分了,但过去它对我来说是合法的。 基本上,您可以避免使用绑定 : 使用 C ++实现解决方案,然后通过JNI将其与JVM链接,或者将其作为单独的应用程序,由主应用程序通过系统的其他机制使用(进程生成,I / O通道) ,你的名字)。 例如,我曾经为特征提取创建了一个服务组件,其他程序将通过ZeroMQ套接字连接到该组件。
试试这个,看它是否有效:
- nu.pattern.OpenCV.loadShared();
- 的System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);
更多信息请参见API部分: https : //github.com/patternconsulting/opencv
还有2.4.9-7 opencv依赖。
只需使用它nu.pattern.OpenCV.loadShared();
用这个静态void方法编写一个类
class Test { public static void loadOpenCVNativeLibrary() { nu.pattern.OpenCV.loadShared(); } }
然后在你的应用程序类(使用静态main)中调用它,用于web应用程序(例如spring boot)
static { Test.loadOpenCVNativeLibrary(); } ... public static void main(String[] args) throws UnknownHostException { }
对于那些想在MacOs环境中使用OpenCV 3.2的用户,可以使用以下存储库定义:
kodfarki https://raw.githubusercontent.com/kodfarki/repository/master/
https://github.com/kodfarki/opencv-example中还有一个示例项目。
要使用此示例项目,您仍需要安装OpenCV二进制文件
brew tap homebrew/science brew install opencv3 --with-java --with-contrib