声明:我的 Mac 是 M1 芯片,MacOS Sonoma 14.2.1 版本。

从官网安装 OpenCV

Mac 电脑使用 opencv 只能先从官网下载源码,然后手动编译,不像 windows 那样给你一个编译好的版本。新版本只有图标,因此在这里附上图片说明。特别一提,下图中的苹果图标是 IOS 开发环境,不是 MacOS 的。

image.png

手动编译还需要下载很多依赖才能顺利完成,根据 opencv 官网的 mac 配置教程,至少得安装 Cmake、python3 等环境。而且下载之后如果使用 Java (我是使用 Java),还得修改配置文件,才能让编译出来的 opencv 中有 jar 包,非常麻烦。

我最后没有使用源码编译的方式,因为官网推荐的教程中也用到了 Homebrew 这个工具。所以我采用 Homebrew 来安装 OpenCV-Java 环境。

这里提一下,正常的用 Idea 加载 OpenCV-Java 环境的思路:

  • 在官网下载源码并且编译完成后,你会在一个特定的文件夹下面找到编译好的 jar 包。比如 windows 版本,你可以提取 exe 文件,在其 opencv/build/java 目录中找到。
  • 然后在 Idea 中的 File->ProjectStructure->Libraries 中点击+号,选择 Java 并添加这个 jar 包,然后就可以使用 opencv 了。
    image.png

在 mac 中,cmd + shift + . 可以显示隐藏的文件夹,我在后面安装好了 opencv 中的 jar 包,在 /opt/homebrew/Cellar/opencv/ {版本号} / share/java 这个目录下找到它,并把它添加到了 Libraries 中。

最麻烦的是安装这个 opencv 源码并编译的过程。下面我们从 Homebrew 的介绍开始。

第一部分:Homebrew 安装

1.1 简介

Homebrew 是一个用命令行下载各种软件的软件集合。下载完 Homebrew 本体后,其会在本体中内置很多软件的下载地址,当你需要那个软件的时候,Homebrew 会自动根据配置文件配置所安装软件的环境变量。因此可以想象这个配置文件的数量是非常多的。
Homebrew 将软件分成了四个仓库:

  • brew Homebrew 源代码仓库
  • homebrew-core Homebrew 核心软件仓库
  • homebrew-bottles Homebrew 预编译二进制软件包
  • homebrew-cask MacOS 客户端应用

1.2 安装 homebrew

  • 终端输入:
    /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
  • 命令行输入 brew,有版本信息表示 Homebrew 下载成功。
  • 使用 brew 下载的文件保存在 /opt/homebrew/Cellar 目录下,每个不同的软件下载完成后会提示你下载到的路径,如我之前下载的 ffmpeg 文件夹:
    image.png

安装 git

brew install git

执行后会下载git,用来从设置的git仓库中下载文件。

以上内容参考了一个 b 站 up 主的视频,链接如下:Homebrew快速上手

1.3 查看和修改源

按照 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

1.4 简单使用

Homebrew 会将安装的程序和相关文件统一安装到指定的目录下。因此无需手动配置环境变量。
初步介绍几个 brew 命令,以 python 安装为例子,Homebrew 会自动安装最新可用版本。

  • 查看版本:brew -v
  • 更新 brew 版本:brew update
  • 查找:brew search python(其中 python 替换为要查找的软件)
  • 安装:brew install python 安装完成输入 python3 -h 查看
  • 卸载:brew uninstall python
  • 查看信息:brew info python
  • 本地软件库列表:brew ls

高级用法:

  • 重新安装 macOS 前用 brew bundle dump 备份所有使用 brew 、 brew cask 安装的软件(生成 Brewfile 文件),重装之后在终端 cd 到 Brewfile 所在文件夹,然后使用 brew bundle 命令即可批量安装回之前安装的软件。

第二部分 用 Homebrew 安装 OpenCV

2.1 Homebrew 安装 OpenCV 所需 Java 环境

我按照下面过程最后成功下载了 jar 包,属于是经验分享,但安装完还是有点迷糊。仅供参考使用。

首先如果是 java 环境可以先参考下面两位博主的文章:
mac上安装opencv
mac系统上通过源码编译安装opencv for java

2.2 基本安装步骤

  1. 下载 opencv:
    输入命令:brew install opencv 第一次输入该命令会抓取如下包,这些包都是安装 opencv 包所依赖的环境:
    image.png

抓取完后显示已经下载了 4.9.0_4 版本的 opencv 并且自动帮我把解压,然后删除了后缀为 tar.gz 的压缩包 :
image.png

使用 brew info opencv 命令查看下载的 open cv 情况如下,有三个打红叉的依赖(cmake, pkg-config, python-setuptools)还需要我们手动下载:

image.png

  1. 下载 OpenCV 特定依赖 :
  • pkg-config 用于精简编译:
brew install pkg-config
  • cmake 一个局部编译工具:
brew install cmake
  • python-setuptools python 启动工具
brew install python-setuptools

最后使用 brew info opencv 查看当前依赖:
image.png

  1. 配置环境变量

在/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”

第三部分配置 OpenCV—Java 环境

3.1 初步配置

环境变量配置好之后在 Idea 中添加 opencv 库,然后出现了问题:opencv/share/opencv4 目录下找不到 opencv 生成的 jar 包

  • 问题分析:参考另一个博主的内容:M1 opencv_contrib 。原因是brew install opencv时对应配置文件的 opencv_java 开关没打开,需要在配置文件中设置。
  1. 编辑 Homebrew 下载 opencv 时的使用的配置文件:

在终端输入 brew edit opencv ,进入 配置文件中,执行以下三步:

  • 步骤一:将 -DBUILD_opencv_java=OFFOFF 改成 ON。具体做法是按 i 进入编辑模式,进行修改。
    image.png

  • 经过实验发现不需要步骤二。
    步骤二:然后复制粘贴下面的 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 cmakecmake 前加 “arch” ,“-arm64”,因为 M1 版本采用 arm 架构

  1. 以上步骤修改完毕后按 esc 退出编辑模式,再按:wq 退出文件。
  2. 下载 ant:brew install ant
  3. 删掉原先下载的 opencv:brew uninstall opencv
  4. 输入 brew install --build-from-source opencv 就会按照刚配置的文件重新下载。

3.2 解决问题

执行以上步骤又出现问题:报错找不到按上面三个步骤修改过的文件 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
    解决方式一截图:
    image.png

这样下载就会发现,又又又出现问题:连接不上 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。最后的结果如下:

image.png

3.3 创建 Java 项目

接下来就可以按照正常的 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 和 brew 下载 OpenCV的区别

maven 从中央仓库中下载的 opencv 和 homebrew 下载在本地的版本区别:

  1. 构建方式:通常从中央仓库下载的 OpenCV 版本可能是已经编译好的二进制版本,而 Homebrew 下载的版本可能是源代码,经过 Homebrew 的构建脚本编译生成的二进制版本。这意味着它们可能使用不同的构建选项、编译器、优化设置等。
  2. 依赖项:Maven 版本可能会提供与 Java 开发相关的依赖项,而 Homebrew 版本可能会提供与 macOS 系统兼容的依赖项。
  3. 安装路径:Maven 从中央仓库下载的 OpenCV 版本通常会被安装在 Maven 本地仓库的目录下,而 Homebrew 下载的版本通常会被安装在 Homebrew 的安装目录下。
  4. 系统兼容性:Homebrew 下载的 OpenCV 版本可能会根据 macOS 系统的特性进行优化,而 Maven 下载的版本可能更加通用,适用于多个操作系统。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐