当前位置:   article > 正文

java环境配置opencv

java环境配置opencv

❗️❗️注意事项:本篇的配置环境基于 Mac + M2芯片(arm64架构)+ Intellij,其他操作系统可能存在不适用的情况,请知晓。

1. 基础信息确认

在进行opencv配置前,需要先确认系统和jvm的架构,以保证后续安装可以顺利进行。

查询设备os架构:

  1. uname -m
  2. //以我的设备为例,输出的是:arm64

查询jvm架构:

  1. java -XshowSettings:properties -version
  2. // 以我的设备为例,os.arch字段输出的是:os.arch = aarch64
  3. // 如果输出的是 os.arch = x86_64,需要重新下载正确的jdk


这里要注意,jvm的架构需要和设备os架构一致,否则在引入opencv动态库时,会报incompatible architecture的错误。

2. Intellij配置opencv

2.1. 安装opencv

mac上面最方便快捷的安装方法是使用Homebrew安装。
Homebrew安装完成后,检查一下你是否已经安装了XCode 命令行工具,在终端执行以下命令:

xcode-select --install

如果出现 error: command line tools are already installed 你就可以直接开始安装OpenCV了,如果没有报错,你就需要安装XCode。


检查你是否安装了Apache Ant,如果没有安装,使用下面的命令安装:

brew install ant

你需要修改opencv的安装规则(formula)以安装opencv的java支持,你可以执行以下命令:

brew edit opencv

进入编辑模式,找到 DBUILD_opencv_java=OFF 并修改为 DBUILD_opencv_java=ON,保存并退出。

现在你可以执行如下命令来安装最近版本的opencv:

HOMEBREW_NO_INSTALL_FROM_API=1 brew install --build-from-source opencv

如果你想要安装旧版本的OpenCV,使用这个命令查看可以选择的版本:

brew search opencv

然后带版本号安装:

HOMEBREW_NO_INSTALL_FROM_API=1 brew install --build-from-source opencv@[Version]

稍等片刻,OpenCV就安装完成了,可以使用这个命令来查看OpenCV的安装信息:

brew info opencv

在 /opt/homebrew/Cellar/opencv/xxx/share 路径下查看jar包的格式:

  1. cd /opt/homebrew/Cellar/opencv/4.9.0_3/share/java/opencv4
  2. file libopencv_java490.dylib
  3. libopencv_java490.dylib: Mach-O 64-bit bundle arm64
  4. // 可以看到编译产生的动态库支持的是arm64架构

2.2. 配置Intellij

在IDEA中创建一个新的项目或者打开一个已有的,打开 File -> Project Structure,在 Project Settings 的 Libraries 点击 + 并选择java

浏览到上面提到的OpenCV的安装路径,在其中找到 share/java/opencv4 并选择 opencv-xxx.jar。文件名称与你安装的具体版本关联。

选择module opencv-430点击 + 在上面的jar所在目录,找到 libopencv_java430.dylib 

配置完成如上图所示,点击OK。

2.3. 配置maven

maven导入依赖。这里需要注意,maven中的依赖版本需要和导入的opencv库版本一致,否则会报错。

以上都配置完成后,就可以在代码中使用opencv了:

  1. public class SIFT {
  2. public static void main(String[] args) throws IOException {
  3. System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
  4. System.out.println("load lib success: " + Core.VERSION);
  5. }
  6. }
  7. // 控制台输出
  8. // load lib success: 4.9.0

3. 踩坑记录

1. brew edit opencv提示Error: Invalid usage: opencv doesn't exist on disk.
很大可能是安装homebrew的时候没有正确安装,比如网络断了等,根据提示更新一下homebrew-core就可以了。

  1. brew tap --force homebrew/core
  2. // 更新成功后再brew edit opencv

2. /opt/homebrew/Cellar/opencv/xxx/share 路径下没有java编译结果。
查看brew在执行 brew install --build-from-source opencv 时的log:

`brew install` ignores locally edited casks and formulae if HOMEBREW_NO_INSTALL_FROM_API is not set.

log说的很明白了,如果不设置 HOMEBREW_NO_INSTALL_FROM_API,就会忽略本地的修改,从线上拉取。线上拉取的formula 默认的 DBUILD_opencv_java=OFF,所以不会生成jar包。网上的参考文档估计是比较早的版本了,当时没有 HOMEBREW_NO_INSTALL_FROM_API 这个东西。

HOMEBREW_NO_INSTALL_FROM_API=1 brew install --build-from-source opencv

3. intellij导入动态库后,运行报错:

  1. Exception in thread "main"java.Lang.UnsatisfiedLinkError Create breakpoint /opt/homebrew/Cellar/opencv/4.9.0 3/share/java/opencv4/libopency java490.dylib:
  2. dlopen(/opt/homebrew/Cellar/opencv/4.9.0_3/share/java/opencv4/Libopencv_java490.dylib,0x0001):tried:'/opt/homebrew/Cellar/opencv/4.9
  3. .0_3/share/java/opencv4/libopencv_java490.dylib'(mach-o file,but is an incompatible architecture (have 'arm64',need 'x86_64'))

原因是安装的jdk有问题,jvm环境是x86_64的,但是编译出来的动态库是aarch64的格式,导致报错。
java -XshowSettings:properties -version 查看 os.arch 字段,如果为"x86_64",去Oracle官网重新下载正确系统的jdk。

4. reference

  1. Mac 安装opencv for java 并配置Intellij Idea详细图文步骤及找不到jar的问题解决_macjar找不到-CSDN博客
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/210909
推荐阅读
相关标签
  

闽ICP备14008679号