java - OpenCV 构建到 java,不在构建中生成 java 文件夹

标签 java opencv intellij-idea cmake

我正在尝试从源代码构建 OpenCV 到 .jar,因为我需要一些贡献的库,例如 Aruco(并且这些库不包含从 OpenCV 的默认下载。

关注 tutorial ,我设置了 CMake,并配置了以下(部分)输出:

OpenCV modules:
    To be built:                 aruco bgsegm bioinspired calib3d ccalib core datasets dnn dnn_objdetect dpm face features2d flann fuzzy hfs highgui img_hash imgcodecs imgproc java java_bindings_generator line_descriptor ml objdetect optflow phase_unwrapping photo plot python_bindings_generator reg rgbd saliency shape stereo stitching structured_light superres surface_matching text tracking ts video videoio videostab xfeatures2d ximgproc xobjdetect xphoto
    Disabled:                    js python3 world
    Disabled by dependency:      -
    Unavailable:                 cnn_3dobj cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev cvv dnn_modern freetype hdf matlab ovis python2 python2 sfm viz
    Applications:                perf_tests apps
    Documentation:               NO
    Non-free algorithms:         YES


...

Java:                          
    ant:                         C:/opencv-3.4.1/apache-ant-1.10.5-bin/bin/ant.bat (ver 1.8.0)
    JNI:                         C:/Program Files/Java/jdk1.8.0_171/include C:/Program Files/Java/jdk1.8.0_171/include/win32 C:/Program Files/Java/jdk1.8.0_171/include
    Java wrappers:               YES
    Java tests:                  NO

然后在 CMake 配置的构建文件夹中运行 mingw32-make 后,它构建没有错误。然后在 build/bin 文件夹中,我确实按预期找到了 opencv-341.jar 文件。

当我在我的 IntelliJ IDEA 中链接这个库时,像 org.opencv.aruco 这样的模块被识别了,正如预期的那样。但是,当尝试构建 java 项目时,出现此错误:

java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)

Caused by: java.lang.UnsatisfiedLinkError: no opencv_java341 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
at AraInvaders.Main.main(Main.java:24)
... 11 more

经过一些研究,我发现我忘记链接 native 库位置,教程中也有描述。然而,根据该教程(和其他资源),构建应该包括一个 build/java/x64 文件夹,其中包含一个 .dll 文件,但是没有 build/java 文件夹。

我确实在 build/lib 中找到了一个 libopencv_java341.dll 但是,链接该文件并不能解决问题。 Image showing that .dll file is linked

当我从 OpenCV 下载 Windows 包时,构建文件夹中有一个 Java 文件夹,其中确实包含 .jar 文件和一个 /x64 文件夹,但是,这些不包括贡献的库,所以这就是我尝试从源代码构建的原因。

所以问题是,我应该怎么做才能正确设置 OpenCV 库,包括贡献的库?

最佳答案

我在 OpenCV 论坛上问过 http://answers.opencv.org/question/210451/opencv-401-face-module-for-java/ .

所以有两种解决方法:

  1. 由于您动态构建了 OpenCV 库,opencv_java.dll 依赖于 opencv_core.dllopencv_imgproc.dll 等。 . 你必须将包含这些的文件夹附加到系统的 PATH

  2. 关闭 BUILD_SHARED_LIBS 标志并重新构建所有内容。

关于java - OpenCV 构建到 java,不在构建中生成 java 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51488757/

相关文章:

c++ - Opencv透明物体检测

intellij-idea - 如何在 IntelliJ 中的快速文档中包装文本?

java - IntelliJ - java.lang.NoClassDefFoundError : net/jodah/failsafe/Policy

java - 如何禁止 "."(点)作为正则表达式中的第一个字符

opencv - Anaconda环境中的OpenCV imshow错误

java - 决定应该使用 Java 技术 - 初学者

python - 如何串联2个np.ndarray?

intellij-idea - Intellij中Run/Debug配置的 "pre-launch"保存在哪里?

java - 如何在不知道文件扩展名的情况下实例化 java.io.File 对象?

java - Android 中加密文本时解密返回空字符串