Rust:在 Windows 上构建并使用 OpenCV

AUTHOR: Locez
VERSION: 2
UPDATE: 2023-05-10

目标


本文目标为在 Windows 上编译 OpenCV,并且利用 opencv-rust 成功在 rust 项目中使用 OpenCV。

前置条件


  • 已经完成 rust 安装
  • 已经完成 git 安装

安装 C++ 编译工具链


此处推荐直接安装 Visual Studio, 可以省去非常多的麻烦, 勾选以下几个选项即可:

  • 使用 C++ 的桌面开发
  • 右侧勾选 C++ ATL 支持,需要注意是否与 MSVC 版本一致(编译 OpenCV 过程中需要)

如果你曾经已经安装过 Visual Studio,此处只需要打开 Installer 修改一下配置即可完成安装。

编译 OpenCV


安装 LLVM


LLVM 为 opencv-rust 编译依赖,此处使用 WINGET 进行安装

1
WinGet install LLVM.LLVM

注意: 需要将 llvm 的路径(C:\Program Files\LLVM\bin)加入到系统环境变量中的 PATH,方便其它应用找到 Clang 等程序,该步骤为必须,此处不再截图添加环境变量

安装 vcpkg


我们使用 vcpkg 来编译 OpenCV,如果此前你已经安装过 vcpkg, 那么这一步可以跳过。

克隆仓库,推荐一个硬盘空间大的磁盘

1
2
3
> git clone https://github.com/microsoft/vcpkg
> cd vcpkg
> .\bootstrap-vcpkg.bat

注意: 将 vcpkg 的路径加入到系统环境变量中的 PATH,方便在调用, 此处就不截图了(这一步是必须的,为了让 rust 更容易找到 OpenCV 的库路径)

编译 OpenCV


编译 OpenCV 的过程中会下载大量的包,为了避免在下载包的时候因为网络原因卡住,powershell 可以使用以下语法配置代理

1
2
> $env:HTTPS_PROXY="http://ip:port"
> $env:HTTP_PROXY="http://ip:port"

使用 vcpkg 编译安装

1
> vcpkg.exe install opencv4[contrib,nonfree]:x64-windows-static

在 Rust 中使用


在 rust 项目中

1
2
> cargo add opencv
> cargo run

以下是 example code

1
2
3
4
5
6
7
8
9
10
use opencv::highgui::{imshow, wait_key};
use opencv::imgcodecs::{imread, IMREAD_COLOR};

fn main() {
let img = imread("1.png", IMREAD_COLOR).unwrap();
imshow("Display Window", &img).unwrap();
println!("Hello, world!");
wait_key(0).unwrap();
}