はじめに
この記事は,Windows上でRust+OpenCVの環境を構築する方法についてです.
準備
OpenCVクレートのドキュメントを参照しながら進めていきます.
RustとChocolateyがインストールされていることを前提とします.
まずは実行するプログラムを用意します.
とりあえずcvtestというプロジェクトを作ります.
> cargo new cvtest
OpenCVクレートを追加します.2025年11月では0.97.2がインストールされました.
> cd cvtest
> cargo add opencv
cat.jpgをグレースケール変換して保存するプログラムを用意します.
use opencv::core;
use opencv::imgcodecs;
use opencv::imgproc;
use opencv::prelude::*;
fn main() -> opencv::Result<()> {
// 画像を読み込む
let img = imgcodecs::imread("cat.jpg", imgcodecs::IMREAD_COLOR)?;
// グレースケールに変換
let mut gray = Mat::default();
imgproc::cvt_color(
&img,
&mut gray,
imgproc::COLOR_BGR2GRAY,
0,
core::AlgorithmHint::ALGO_HINT_DEFAULT,
)?;
// 結果を保存
imgcodecs::imwrite("output.jpg", &gray, &Default::default())?;
Ok(())
}
OpenCVのインストール
ChocolateyでLLVMとOpenCVをインストールします.
choco install llvm opencv
私の場合は,LLVMはC:\Program Files\LLVMに,OpenCVはC:\tools\opencvにインストールされました.インストール先が異なる場合は適宜読み替えてください.
次にパスを設定します.
ドキュメントではOPENCV_LINK_LIBS,OPENCV_LINK_PATHS,OPENCV_INCLUDE_PATHSが必須のようです.
OpenCVのインストール先がC:\tools\opencvの場合は,以下のように設定します.後述するようにOPENCV_LINK_LIBSはバージョン依存なので注意してください.
> [Environment]::SetEnvironmentVariable('OPENCV_LINK_LIBS', 'opencv_world4110', 'User')
> [Environment]::SetEnvironmentVariable('OPENCV_LINK_PATHS', 'C:\tools\opencv\build\x64\vc16\lib', 'User')
> [Environment]::SetEnvironmentVariable('OPENCV_INCLUDE_PATHS', 'C:\tools\opencv\build\include', 'User')
OPENCV_LINK_LIBSはOpenCVのバージョン依存です.C:\tools\opencv\build\bin\opencv_videoio_ffmpeg4110_64.dllのように,インストールディレクトリにはバージョン番号がファイル名に含まれているファイルが複数あります.確認したバージョン番号に応じて書き換えてください.
次に,LLVMのパスも設定します.ドキュメントでは触れられていませんでしたが,LLVMのパスを設定しなかった場合,ビルド時にfailed to run custom build command for opencv v0.97.2というエラーが出ました.
> [Environment]::SetEnvironmentVariable('PATH', $env:PATH + ';C:\\Program Files\\LLVM\\bin', 'User')
これでビルドは通るようになりました.
> cargo build
しかし,プログラムの実行には失敗します.
> cargo run
Compiling opencv v0.97.2
Compiling cvcv v0.1.0 (C:\cvcv)
Finished `dev` profile [unoptimized + debuginfo] target(s) in 21.17s
Running `target\debug\cvcv.exe`
error: process didn't exit successfully: `target\debug\cvcv.exe` (exit code: 0xc0000135, STATUS_DLL_NOT_FOUND)
このエラーは実行時にDLLファイルを見つけられなかったため起こるようです.
ドキュメントではPATHにDLLファイルが存在するディレクトリを指定するように書かれていますが,ここがハマりポイントでした.
Be sure to specify paths in UNIX style (/C/Program Files/Dir) because colon in PATH might be interpreted as the entry separator.
「:」が区切りと勘違いされないように,パスをUNIX形式で書く必要があるようです.しかし,/C/tools/opencv/build/x64/vc16/binを設定してもエラーは解消されませんでした.
逆にWindows形式のパスを設定すると正常に実行できました.
> [Environment]::SetEnvironmentVariable('PATH', $env:PATH + ';C:\tools\opencv\build\x64\vc16\bin', 'User')