Java OpenCV from Maven



是否有任何方法可以从存储库中获取OpenCV?我应该将哪个工件添加到pom.xml?我发现的每个教程都是从14年来的,似乎有些变化了 - 他们说这还不是在Maven官方存储库中,但我已经找到了条目:

<!-- https://mvnrepository.com/artifact/nu.pattern/opencv -->
<dependency>
   <groupId>nu.pattern</groupId>
   <artifactId>opencv</artifactId>
   <version>2.4.9-7</version>
</dependency>

可悲的是,我有错误

Caused by: java.lang.UnsatisfiedLinkError: no opencv_java249 in java.library.path

当我使用System.loadLibrary(Core.NATIVE_LIBRARY_NAME)时。我可以以一种使我的项目包括它的方式添加此库,并"忘记"有关将其添加到ClassPath中的"忘记"?

在您的 pom 文件中添加以下依赖性:

<dependency>
    <groupId>org.openpnp</groupId>
    <artifactId>opencv</artifactId>
    <version>3.2.0-0</version>
</dependency>

并更换以下行:

System.loadLibrary(Core.NATIVE_LIBRARY_NAME)

nu.pattern.OpenCV.loadShared();

这也应该解决 Windows 中的问题。快乐的编码。

这对我有用。

nu.pattern.OpenCV.loadLibrary();

我正在使用以下maven依赖性

<dependency>
  <groupId>nu.pattern</groupId>
  <artifactId>opencv</artifactId>
  <version>2.4.9-4</version>
</dependency>

尝试一下,看看它是否有效:

  • nu.pattern.OpenCV.loadShared();
  • System.loadLibrary(org.opencv.core.Core.NATIVE_LIBRARY_NAME);

API部分的更多信息:https://github.com/patternconsulting/opencv

也有2.4.9-7 openCV依赖。

目前没有官方方法可以将官方的Java绑定作为Maven依赖性(如评论中已经提到的那样,Maven Artifact已在#4588中要求,但仍在无人看管)。尽管如此,您的问题有3种可能的方法:

  • java.lang.UnsatisfiedLinkError是因为您需要分别安装绑定的二进制文件(即" opencv_java")。最有可能的非官方伪像不包括它们(或与您的系统兼容的工件)。为了构建绑定:

    1. git clone openCV存储库。
    2. git checkout预期版本(似乎您正在使用2.4.9版,尽管有更多的版本)
    3. 请按照此处的说明构建OpenCV及其Java绑定,从而产生动态链接的库(" OpenCV_JAVA249.DLL"," LIBOPENCV_JAVA249.SO"或其他方面,根据您的操作系统。
    4. )。
  • 将共享库文件复制到您的java.library.path(同样,此变量是系统依赖性的,但是在运行应用程序时可以定义)。此时,您应该准备好使用该工具。
  • 一种替代方法是使用其他绑定:openCV的JavACPP预设似乎与官方的JAVACPP预设工作一样好,并且这些预设在Maven中注册(包括各种平台的二进制文件!)。请记住,API可能不完全相同。

  • 这个解决方案听起来可能太远了,但是过去它对我有合法的工作。基本上,您可以避免使用绑定:在C 中实现解决方案,然后通过JNI将其与JVM链接或将其链接为单独的应用程序,由Main Application通过系统的其他机制使用(过程产卵,I/O频道,您将其命名)。例如,我曾经为其他程序通过Zeromq插座连接到功能提取的服务组件。

只需使用它 nu.pattern.opencv.loadshared();

用这种静态void方法写一个类

class Test {
public static void loadOpenCVNativeLibrary() {
nu.pattern.OpenCV.loadShared();
}
}

和在您的应用程序类(带有静态主)的Web应用程序(例如Spring Boot)之后

static {
Test.loadOpenCVNativeLibrary();
}
...
public static void main(String[] args) throws UnknownHostException {
}

您需要的一切:在本地Maven存储库中安装JAR:

mvn install:install-file -Dfile=C:opencv411buildjavaopencv-411.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库。我通过在Java.library.path中添加Lib文件夹到Maven-Surefire插件:

<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>
    public static void main(String[] arges) throws MalformedURLException, 
IOException, Exception {
    loadLibraries();
    // create and print on screen a 3x3 identity matrix
    System.out.println("Create a 3x3 identity matrix...");
    Mat mat = Mat.eye(3, 3, CvType.CV_8UC1);
    System.out.println("mat = " + mat.dump());
    // prepare to convert a RGB image in gray scale
    String location = "resources/Poli.jpg";
    System.out.print("Convert the image at " + location + " in gray scale... ");
    // get the jpeg image from the internal resource folder
    Mat image = Imgcodecs.imread(location);
    // convert the image in gray scale
    Imgproc.cvtColor(image, image, Imgproc.COLOR_RGB2GRAY);
    // write the new image on disk
    Imgcodecs.imwrite("resources/Poli-gray.jpg", image);
    System.out.println("Done!");
}
    private static void loadLibraries() {
    try {
        InputStream in = null;
        File fileOut = null;
        String osName = System.getProperty("os.name");
//            String opencvpath = System.getProperty("user.dir");
        String opencvpath = "C:\opencv411\build\java\";
        if (osName.startsWith("Windows")) {
            int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model"));
            if (bitness == 32) {
                opencvpath = opencvpath + "\x86\";
            } else if (bitness == 64) {
                opencvpath = opencvpath + "\x64\";
            } else {
                opencvpath = opencvpath + "\x86\";
            }
        } else if (osName.equals("Mac OS X")) {
            opencvpath = opencvpath + "Your path to .dylib";
        }
        System.out.println(opencvpath);
//        System.out.println("Core.NATIVE_LIBRARY_NAME = " + Core.NATIVE_LIBRARY_NAME);
        System.out.println("Core.NATIVE_LIBRARY_NAME = " + "opencv_java411.dll");
//        System.load(opencvpath + Core.NATIVE_LIBRARY_NAME + ".dll");
        System.load(opencvpath + "opencv_java411.dll");
    } catch (Exception e) {
        throw new RuntimeException("Failed to load opencv native library", e);
    }
}

对于那些想要在MacOS环境中使用OpenCV 3.2的人,您可以使用以下存储库定义:

<repositories>
   <repository>
      <id>kodfarki</id>
      <url>https://raw.githubusercontent.com/kodfarki/repository/master/</url>
   </repository>
</repositories>

https://github.com/kodfarki/opencv-example中还有一个示例项目。

要使用此示例项目,您仍然需要安装OpenCV二进制文件

brew tap homebrew/science brew install opencv3 --with-java --with-contrib

对于Windows,@Sachin Aryal的答案存在问题。@anirban Chakraborty的答案是一个很好的提示。但是,在此线程中所述的运行时仍然存在问题。

最终用OpenCV.loadLocally();代替CC_11为我工作。

最新更新