赞
踩
声明:我的 Mac 是 M1 芯片,MacOS Sonoma 14.2.1 版本。
Mac 电脑使用 opencv 只能先从官网下载源码,然后手动编译,不像 windows 那样给你一个编译好的版本。新版本只有图标,因此在这里附上图片说明。特别一提,下图中的苹果图标是 IOS 开发环境,不是 MacOS 的。
手动编译还需要下载很多依赖才能顺利完成,根据 opencv 官网的 mac 配置教程,至少得安装 Cmake、python3 等环境。而且下载之后如果使用 Java (我是使用 Java),还得修改配置文件,才能让编译出来的 opencv 中有 jar 包,非常麻烦。
我最后没有使用源码编译的方式,因为官网推荐的教程中也用到了 Homebrew 这个工具。所以我采用 Homebrew 来安装 OpenCV-Java 环境。
这里提一下,正常的用 Idea 加载 OpenCV-Java 环境的思路:
在 mac 中,cmd + shift + .
可以显示隐藏的文件夹,我在后面安装好了 opencv 中的 jar 包,在 /opt/homebrew/Cellar/opencv/ {版本号} / share/java
这个目录下找到它,并把它添加到了 Libraries 中。
最麻烦的是安装这个 opencv 源码并编译的过程。下面我们从 Homebrew 的介绍开始。
Homebrew 是一个用命令行下载各种软件的软件集合。下载完 Homebrew 本体后,其会在本体中内置很多软件的下载地址,当你需要那个软件的时候,Homebrew 会自动根据配置文件配置所安装软件的环境变量。因此可以想象这个配置文件的数量是非常多的。
Homebrew 将软件分成了四个仓库:
brew
Homebrew 源代码仓库homebrew-core
Homebrew 核心软件仓库homebrew-bottles
Homebrew 预编译二进制软件包homebrew-cask
MacOS 客户端应用终端输入:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
无法访问github则使用以下镜像:
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)
安装完成后又提示让我们继续下载 Core、Cask、services,我们一并下载。
因为按照上面步骤下载 Homebrew 后会自动配置一些环境变量到 .zprofile
文件中,安装结束后运行 source /Users/{用户名}/.zprofile
以使 .zprofile
文件生效。
如果后续brew update 出问题,可以把 core、cask、services 这些仓库都删掉重新下载,命令如下:
# core、service 替换cask都执行一遍。
rm -rf "/opt/homebrew/Library/Taps/homebrew/homebrew-cask"
brew tap homebrew/cask
/opt/homebrew/Cellar
目录下,每个不同的软件下载完成后会提示你下载到的路径,如我之前下载的 ffmpeg 文件夹:安装 git
brew install git
执行后会下载git,用来从设置的git仓库中下载文件。
以上内容参考了一个 b 站 up 主的视频,链接如下:Homebrew快速上手
按照 1.2 步骤中下载的 Homebrew 会把配置文件中下载软件时的位置定位在 github 仓库,可以用以下命令查看。
每一步中的 https://mirrors.ustc.edu.cn/
(中科大源) 可以替换为下面任意一个源:
#阿里源
https://mirrors.aliyun.com/homebrew/
#清华源
https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/
查看源:
# 查看brew镜像源
git -C "$(brew --repo)" remote -v
# 查看homebrew-core镜像源
git -C "$(brew --repo homebrew/core)" remote -v
# 查看homebrew-cask镜像源(需要安装后才能查看)
git -C "$(brew --repo homebrew/cask)" remote -v
连不上时要修改,这里也给出相关命令:
# 替换brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.ustc.edu.cn/brew.git
# 替换homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git
# 替换homebrew-cask.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-cask"
git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git
# 替换homebrew-bottles:
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile
# 应用生效
brew update
Homebrew 会将安装的程序和相关文件统一安装到指定的目录下。因此无需手动配置环境变量。
初步介绍几个 brew 命令,以 python 安装为例子,Homebrew 会自动安装最新可用版本。
高级用法:
Brewfile
所在文件夹,然后使用 brew bundle
命令即可批量安装回之前安装的软件。我按照下面过程最后成功下载了 jar 包,属于是经验分享,但安装完还是有点迷糊。仅供参考使用。
首先如果是 java 环境可以先参考下面两位博主的文章:
mac上安装opencv
mac系统上通过源码编译安装opencv for java
brew install opencv
第一次输入该命令会抓取如下包,这些包都是安装 opencv 包所依赖的环境:抓取完后显示已经下载了 4.9.0_4 版本的 opencv 并且自动帮我把解压,然后删除了后缀为 tar.gz 的压缩包 :
使用 brew info opencv
命令查看下载的 open cv 情况如下,有三个打红叉的依赖(cmake, pkg-config, python-setuptools)还需要我们手动下载:
pkg-config
用于精简编译:brew install pkg-config
cmake
一个局部编译工具:brew install cmake
python-setuptools
python 启动工具brew install python-setuptools
最后使用 brew info opencv
查看当前依赖:
在/Usrs/{用户名}/.zprofile中配置环境变量。具体步骤不展开讨论。
export PATH="/opt/homebrew/Cellar/opencv/4.9.0_4/bin:$PATH"
export PATH="-L/opt/homebrew/Cellar/opencv/4.9.0_4/lib"
export PATH="-I/opt/homebrew/Cellar/opencv/4.9.0_4/include"
export PATH="/opt/homebrew/Cellar/opencv/4.9.0_4/lib/pkgconfig"
以下为 intel 版本配置环境变量方法,不采用,因为 M1 芯片版本 homebrew 不安装在以下路径。
export PKG_CONFIG_PATH=“/usr/local/opt/opencv/lib/pkgconfig”
export LDFLAGS=“-L/usr/local/opt/opencv/lib”
export CPPFLAGS=“-I/usr/local/opt/opencv/include”
环境变量配置好之后在 Idea 中添加 opencv 库,然后出现了问题:opencv/share/opencv4
目录下找不到 opencv 生成的 jar 包
在终端输入 brew edit opencv
,进入 配置文件中,执行以下三步:
步骤一:将 -DBUILD_opencv_java=OFF
的 OFF
改成 ON
。具体做法是按 i 进入编辑模式,进行修改。
经过实验发现不需要步骤二。
步骤二:然后复制粘贴下面的 JDK 版本信息到 args 中,即步骤一 -DBUILD_opencv_java=on
下一行,可以自行添加一个 # 注释,以免忘记修改过。下面代码的 JDK 替换为自己对应目录中的 JDK 版本
-DJAVA_INCLUDE_PATH=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/include
-DJAVA_AWT_LIBRARY=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/jre/lib/libawt.dylib
-DJAVA_JVM_LIBRARY=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/jre/lib/libjvm.dylib
经过实验发现不需要步骤三
步骤三:在每个 system cmake
的 cmake
前加 “arch” ,“-arm64”,因为 M1 版本采用 arm 架构
brew install ant
brew uninstall opencv
brew install --build-from-source opencv
就会按照刚配置的文件重新下载。执行以上步骤又出现问题:报错找不到按上面三个步骤修改过的文件 opencv.rb。说明上面这个命令执行的文件找错了位置,它用的是安装 homebrew 时一起下载的 git 文件夹中的 opencv.rb 文档。可以有以下两种解决方式:
brew doctor
命令,用 homebrew 自带的检查器检查你的问题。其中有一个:uncommitted files. 说明修改的文件还没提交到 git 上。我按照它给出的建议提交了修改。brew install --build-from-source /opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/o/opencv.rb
这样下载就会发现,又又又出现问题:连接不上 github 仓库。查找一个教程,科学上网的人,使用代理时要配置如下命令:
sudo vim /etc/hosts#进入hosts配置文件
199.232.28.133 raw.githubusercontent.com#添加下面这一行
最后下载了 38 分钟,终于下好了。运行的是解决方式二的命令 brew install --build-from-source /opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/o/opencv.rb
。最后的结果如下:
接下来就可以按照正常的 OpenCV 使用方式调用了。
下面这段代码在使用 Maven 构建项目时使用
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>4.9.0-4</version>
</dependency>
编译运行代码:
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
这行代码每次使用opencv时都需要,因此推荐在main方法所在class的静态块中加入这行代码。
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.imgcodecs.Imgcodecs;
public class Main {
static {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME); }
public static void main(String[] args) {
// Load an image
Mat image = Imgcodecs.imread("path_to_your_image.jpg");
// Perform image processing tasks with OpenCV
// For example, display the image size
System.out.println("Image width: " + image.width());
System.out.println("Image height: " + image.height());
}
}
maven 从中央仓库中下载的 opencv 和 homebrew 下载在本地的版本区别:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。