首页 > 解决方案 > 如何在 Maven 项目中使用 OpenCV 构建(opencv 和 opencv_contrib)

问题描述

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

我正在使用该Maven 存储库,但 contrib 模块不可用。

我尝试将 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/

并保持上述依赖关系,但引发了相同的错误......

我应该怎么办?

标签: javaopencvjarm2eclipse

解决方案


感谢答案,我找到了将 OpenCV jar 和 libs 包含到 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>

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


推荐阅读