如何在Maven项目中使用OpenCV构建(opencv和opencv_contrib)



我编译了openCV和OpenCV_contrib库,并在build/lib/中得到了生成的build/bin/opencv-411.jar和库.so。现在我想知道如何将这些添加到我的 Maven 项目中?

我正在使用那个 Maven 存储库,但贡献模块不可用。

我尝试将 jar 作为依赖项包含在内,如下所示:

<dependency>
    <groupId>org.opencv</groupId>
    <artifactId>opencv-411</artifactId>
    <version>4.1.0</version> 
    <scope>system</scope>
    <systemPath>${resourcesfolder}/opencv-411.jar</systemPath>
</dependency>

启动clean javafx:compile时我没有收到任何错误,但是当我启动clean javafx:run时出现很多OpenCV错误:

[错误] 编译错误:

[INFO] -------------------------------------------------------------
[ERROR] /home/.../src/main/java/model/VideoModel.java:[3,23] package org.opencv.core does not exist
[ERROR] /home/.../src/main/java/model/VideoModel.java:[4,23] package org.opencv.core does not exist
[ERROR] /home/.../src/main/java/model/VideoModel.java:[5,26] package org.opencv.videoio does not exist
[ERROR] /home/.../src/main/java/model/VideoModel.java:[6,26] package org.opencv.videoio does not exist
[ERROR] /home/.../src/main/java/model/VideoModel.java:[25,17] cannot find symbol
     symbol:   class VideoCapture
     location: class model.VideoModel
[ERROR] /home/.../src/main/java/model/VideoModel.java:[26,17] cannot find symbol
     symbol:   class Mat

我也看了一下,但他在远程存储库中部署了他的新jar,其中包含可执行文件和库。有趣的部分是jar创建,所以我尝试对opencv-411.jarlib/文件夹做同样的事情:

cp opencv-411.jar opencv-411-new.jar
jar -uvf opencv-411-new.jar lib/

并保留了上述依赖项,但引发了相同的错误......

我该怎么办?

多亏了这些答案,我找到了将 OpenCV jar 和库包含在 Maven 的解决方案:

  • 使用 MAVEN 本地存储库安装 jar
mvn install:install-file -Dfile=/home/.../src/main/resources/opencv.jar -DgroupId=org -DartifactId=opencv -Dversion=4.1.1 -Dpackaging=jar
  • 在 POM 中创建依赖项.xml:
<dependency> 
 <groupId>org</groupId> 
 <artifactId>opencv</artifactId>
 <version>4.1.1</version>  
</dependency> 

现在 jar 已包含在内,我们必须以某种方式添加 OpenCV 库。

只需在应用中加载库:

System.load("/path/to/lib/libopencv_java411.so");

对于 UI 测试,由于 maven-surefire-plugin 使用特殊的 JVM,因此您必须将 lib 文件夹指定到 java.library.path:

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-surefire-plugin</artifactId>
 <version>2.22.2</version>
 <configuration>
  <argLine>-Djava.library.path=${project.build.outputDirectory}/lib</argLine>
 </configuration>
</plugin>

如果您有更好的解决方案或更正要添加,请随时编辑。

Maven 期望 $USER_HOME/.m2 中的工件(.jar文件等(,因为您自己编译了 opencv,您还需要在本地 Maven 存储库中安装该文件(作为第三方模块(:

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> 
    -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

变量需要与您在pom中使用的变量匹配的地方.xml并且必须将打包设置为jar

另请参阅:https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

> mvn install:install-file -dfile=C:\Users\your jar path -DgroupId=org.opencv -DartifactId=opencv-411 -Dversion=4.1.0 -Dpackaging=jar你可以使用这个可以解决你的问题

最新更新