首页 编程 技术 应用
JavaCV程序启动时出错即 no opencv_java460 in java.library.path,如何正确安装OpenCV460 编程 | 技术框架 | JavaCV
在MacOS系统中,OpenCV的Java库要配置到JDK的库路径中,才不会出现java.lang.UnsatisfiedLinkError: no opencv_java460 in java.library.path错误。

在Spring Cloud in Java工程项目中,添加JavaCV的maven包,pom.xml配置项如下:

        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv</artifactId>
            <version>1.5.8</version>
        </dependency>
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv-platform</artifactId>
            <version>1.5.8</version>
        </dependency>

在maven更新后,这些Jar会自动下载且部署到工程项目中,然后写一个最简单JavaCV代码,示例如下:

public class TimerMain
{
    static
    {
        //在使用OpenCV前必须加载Core.NATIVE_LIBRARY_NAME类,否则会报错
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
    }

    public static void main(String[] args)
    {
        try
        {
          //读取当前路径下的图片
          Mat src = Imgcodecs.imread("1.png");

          Mat hsv = new Mat();

          //图片转HSV
          Imgproc.cvtColor(src, hsv,Imgproc.COLOR_BGR2HSV);

          Mat hist = new Mat();
          //直方图计算
          Imgproc.calcHist(Stream.of(hsv).collect(Collectors.toList()),new MatOfInt(0),new Mat(),hist,new MatOfInt(255) ,new MatOfFloat(0,256));
          //图片归一化
          Core.normalize(hist, hist, 1, hist.rows() , Core.NORM_MINMAX, -1, new Mat() );
          //直方图比较
          double a = Imgproc.compareHist(hist,hist,Imgproc.CV_COMP_CORREL);
          
          System.out.println("(越接近1越相识度越高)同一图片的比较结果:"+a);
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
}

运行上述程序时候,会抛出下面错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java460 in java.library.path: [/Users/williamhong/Library/Java/Extensions, /Library/Java/Extensions, /Network/Library/Java/Extensions, /System/Library/Java/Extensions, /usr/lib/java, .]
	at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2660)
	at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:827)
	at java.base/java.lang.System.loadLibrary(System.java:1871)
	at com.vg.TimerMain.<clinit>(Main.java:25)

这个错误的关键是opencv_java460库要配置到java.library.path之中。下面讲讲如何安装这个OpenCV Java应用包,步骤如下:

一、下载OpenCV 4.6.0源码

https://github.com/opencv/opencv/archive/4.6.0.zip

在本地路径中,解压这个压缩包,示意如下:

 

二、配置环境变量

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.11.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

export JAVA_AWT_INCLUDE_PATH=$JAVA_HOME
export JAVA_AWT_LIBRARY=$JAVA_HOME
export JAVA_INCLUDE_PATH=$JAVA_HOME/indclude
export JAVA_INCLUDE_PATH2=$JAVA_HOME/include/darwin
export JAVA_JVM_LIBRARY=$JAVA_HOME

请注意:JAVA_HOME设置为自己本地实际安装的JDK路径,且依次在Terminal终端执行上述配置。

 

三、cmake设置

cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON ..
cmake -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF ..
cmake -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF ..
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake -D WITH_TBB=ON -D WITH_EIGEN=ON -D OPENCV_GENERATE_PKGCONFIG=ON  -D BUILD_DOCS=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF  -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=O -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake -D CMAKE_BUILD_TYPE=Release -D OPENCV_GENERATE_PKGCONFIG=ON -D BUILD_EXAMPLES=ON -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake -D BUILD_TIFF=ON ..
cmake -D BUILD_ZLIB=OFF ..

请注意依次在Terminal终端执行上述配置。

 

四、编译OpenCV

$ cd opencv-4.6.0
$ mkdir build
$ cd build
$ make -j8

请注意,这个过程要花费时间很长,直到100%编译完成,如下图:

 

五、编译Java Module

$ cd modules/java
$ make -j8

 请注意直至编译100%完成,如下图:

 

五、配置libopencv_java460.dylib

在build/lib目录下找到库文件libopencv_java460.dylib,如下图:

把这个库文件复制到“Library/java/Extensions”目录下,如下图:

六、配置opencv-460.jar到工程项目中

在build/bin目录下找到库文件opencv-460.jar,如下图:

然后,复制这个Jar包到工程项目的Resources/lib,如下图:

最后,配置一下工程项目pom.xml,如下:

       <dependency>
            <groupId>org.opencv</groupId>
            <artifactId>opencv</artifactId>
            <version>4.6.0</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/lib/opencv-460.jar</systemPath>
        </dependency>

 

上述操作完成之后,再次运行main,结果就正常啦。特别提醒一下,不要使用HomeBrew安装OpenCV版本,因为它默认不带Java模块,故没有相关的库和jar包。

点击阅读全文

发表 2022-11-25 12:13:11 伯牙 →

京ICP备16053008号-4 公安备案号11010502049515

©️2022 码嗨路书版权所有,威廉宏业科技出品