java环境配置opencv

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

1. 基础信息确认

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

查询设备os架构:

uname -m

//以我的设备为例,输出的是:arm64

查询jvm架构:

java -XshowSettings:properties -version
// 以我的设备为例,os.arch字段输出的是:os.arch = aarch64
// 如果输出的是 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包的格式:

cd /opt/homebrew/Cellar/opencv/4.9.0_3/share/java/opencv4
file libopencv_java490.dylib 
libopencv_java490.dylib: Mach-O 64-bit bundle arm64

// 可以看到编译产生的动态库支持的是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了:

public class SIFT {
    public static void main(String[] args) throws IOException {
        System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
        System.out.println("load lib success: " + Core.VERSION);
    }
}

// 控制台输出
// load lib success: 4.9.0

3. 踩坑记录

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

brew tap --force homebrew/core

// 更新成功后再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导入动态库后,运行报错:

Exception in thread "main"java.Lang.UnsatisfiedLinkError Create breakpoint /opt/homebrew/Cellar/opencv/4.9.0 3/share/java/opencv4/libopency java490.dylib:
dlopen(/opt/homebrew/Cellar/opencv/4.9.0_3/share/java/opencv4/Libopencv_java490.dylib,0x0001):tried:'/opt/homebrew/Cellar/opencv/4.9
.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博客
  2. M1、Mac环境下安装opencv和配置环境(java)_mac m1 下载 安装java opencv native-CSDN博客
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值