RustでOpenCVを使う

Sahil Bhosale 2023年10月8日
  1. さびコマンド
  2. Rustをインストールする
  3. Rustを始めよう
  4. RustでOpenCVを使う
RustでOpenCVを使う

Rust は、(実行速度の点で) 迅速でより本格的なソフトウェアを作成するのに役立つプログラミング言語です。 実質的な型システムと所有権モデルによるメモリ管理を扱います。

これは静的にコンパイルされた言語です。つまり、Rust プログラムを作成すると、それをバイナリ実行可能ファイルにコンパイルでき、このファイルは Rust がインストールされていない他のシステムで実行できます。 コードを実行するにはインタープリターが必要なため、これは他の言語とは異なります。

また、エラーの処理、バグの検出、データ表現、同時実行性にも優れています。 この言語は初心者にはお勧めできません。 理解を深めるために、1つ以上のプログラミング言語に精通している必要があります。

さびコマンド

まず、いくつかのRustコマンドの基本的な概要を取得しましょう:

  • rustc: rustc は、Rust コードをコンパイルするために使用される Rust コンパイラです。 Rust の入力コードを受け取り、それをバイナリ コード/機械可読コードにコンパイルします。
  • rustup: rustup コマンドは、Rust のインストールと更新に使用されます。
  • cargo: これは Rust ビルド システムおよびパッケージ マネージャーであり、Python の pip、Ruby の gem、JavaScript の npm などの他の言語と同様です。

残りのコマンドは、ターミナルで cargo を使用して確認できます。

Rustをインストールする

システムに Rust が既にインストールされている場合は、この手順を省略できます。 システムに Rust がインストールされていない場合は、システムに合わせて以下の手順に従ってください。

Linux/Mac システムの場合

Rust を Unix システムにインストールするには、以下のコマンドをコピーして端末に貼り付け、Enter を押します。

curl https://sh.rustup.rs -sSf | sh

このコードは、システムに Rust をダウンロードしてインストールします。

インストール オプションを尋ねられたら、デフォルトのインストールを選択したいので、1 を入力して Enter を押して、インストールを続行する (デフォルト) を選択します。

ダウンロード後、画面の最後に"Rust is installed now. Great!"と表示され、その下に"Press the Enter key to continue" と表示されるので、Enterを押します。 ターミナルを閉じます。

Rust が正しくインストールされているかどうかを確認するには、新しいターミナルを再度開き、以下のコマンドを使用して Rust のバージョンを表示します。

rustc --version

バージョン番号、コミット ハッシュ、およびコミット日付が表示されれば、Rust が正常にインストールされたと言えます。

Rustを始めよう

まず、ターミナルに移動して、次のコードを入力します。 Rust がインストールされているパスは、ターミナルの同じパスである必要があります。

cargo

これにより、Rust で使用されるすべてのパッケージとコマンドが表示されます。

次に、cargo を使用して Rust で新しいプロジェクトを作成するための以下のコードを入力します。 これは、opencv-rust という名前のバイナリ コード プロジェクトです。

cargo new --bin opencv-rust

これで、画面に "Created binary (application) opencv-rust package" という出力が表示されます。 このコマンドで、opencv-rust という名前の新しいバイナリ ファイルを作成しました。

次に、以下のコマンドを使用してこのプロジェクトを開きます。

cd opencv-rust

これによりパスが更新され、プロジェクトが開きます。 ここで、このプロジェクトのコードを記述するために、次のように入力します。

code .

これにより、Visual Studio Code が開きます。

次に、左側の src にある main.rs ファイルに移動します。 main.rs を選択して開きます。 右側には、定型コードが既に存在していることがわかります。 次に、Ctrl+Shift+` を使用して VSCode ターミナルに移動し、以下のコマンドを実行します。

cargo build
cargo run

これにより、パッケージと依存関係がコンパイルされ、コードが実行されます。 VSCode ターミナルで、ボイラー コードの出力を確認できます。

RustでOpenCVを使う

OpenCV をインストールする前に、OpenCV 用のパッケージ コンパイラとプロジェクト ビルド システムをインストールする必要があります。 インストールするには、Mac 用のパッケージ マネージャーである Homebrew または brew をインストールする必要があります。 このリンクを使用してbrewをインストールできます。

この後、以下のパッケージをインストールし、OpenCV 用のシステムを 1つずつインストールします。 1つ目は、ライブラリのコンパイルに使用されるツールである pkg-config です。

brew install pkg-config

2つ目は、ネイティブ ライブラリのビルドをサポートするビルド システムである CMake システムのインストールです。 これについては、以下のコードに従ってください。

brew install cmake

OpenCVパッケージとllvmをインストールします。これには、OpenCVを処理してオブジェクトファイルに変換するために必要なすべてのツール、ライブラリ、およびヘッダーファイルが含まれています。

brew install --debug llvm-dev
brew install libopencv-dev

libopencv-dev は OpenCV ライブラリをインストールします。 この手順の後、環境パスをエクスポートすることが重要です。

OpenCV が正しく動作するかどうかを確認するために、OpenCV プログラムを作成する必要があります。 左側を見ると、Cargo.toml ファイルがあります。 それをクリックすると、右側にファイルが開き、その下に依存関係が表示されます。

依存関係の下に、次のコードを追加します。

opencv = "0.73.0"
bytes = "1"
anyhow = "1"

バージョン名を見つけるには、ウェブサイト crates.io にアクセスし、OpenCV を検索して、利用可能な最新バージョンを見つけます。 この記事を書いているときに、最新バージョンが 0.73.0 であることがわかったので、VSCode で更新しました。

次に、srcmain.rs ファイルに向かい、以下の簡単な OpenCV-Rust プログラムを作成します。

これは、OpenCV を使用して画像を水平方向に反転する単純な Rust コードです。

コード スニペット - (Rust):

use anyhow::Result;
use opencv::{
    core::{self, Mat, Vector},
    imgcodecs,
};

fn main() -> Result<()> {
    let source_img = imgcodecs::imread("car.png", imgcodecs::IMREAD_UNCHANGED)?;

    // Flipping image horizontally
    let mut destination_arr = Mat::default();
    core::flip(&source_img, &mut destination_arr, 1)?;

    // Creating an output image
    let arguments: Vector<i32> = Vector::new();
    imgcodecs::imwrite("final-output.png", &destination_arr, &arguments)?;
    Ok(())
}

まず、上記のように、anyhow および opencv ライブラリからいくつかのメソッドをインポートしました: ResultMatVector、および imgcodecs。 次に、Result を返す main 関数を作成しました。

出力のエラーを自動的に処理するために anyhow ライブラリの Result を使用しています。

Rust コード内のソース イメージを読み取るには、imgcodecs から OpenCV の imread を使用し、それを source_img 変数内に格納する必要があります。 この例では、ファイル名と拡張子が car.png の車の画像を使用します。

画像を読み込んだので、マルチチャンネル配列である Mat を渡す destination_Arr を作成する必要があります。 画像を水平方向に反転するには、OpenCV ライブラリの flip を使用し、source_imgdestination_arr、および 1flip メソッドに渡す必要があります。

最後のパラメータ 1 は、画像を水平方向に反転します。 画像を垂直方向に反転させたい場合は、1 の代わりに 0 を渡すことができます。

反転した画像を出力として保存するには、OpenCV の imwrite メソッドを使用する必要があります。 ここで、ファイル名を最初のパラメーターに渡すことで、出力ファイルに任意の名前を付けることができます。

最後に、コードを実行する準備が整いました。 コードをビルドして実行するには、以下の 2つのコマンドを実行する必要があります。

cargo build
cargo run

出力:

OpenCV 錆出力

これにより、Rust コードがコンパイルおよび実行されます。 このコマンドの出力は上記のとおりです。

著者: Sahil Bhosale
Sahil Bhosale avatar Sahil Bhosale avatar

Sahil is a full-stack developer who loves to build software. He likes to share his knowledge by writing technical articles and helping clients by working with them as freelance software engineer and technical writer on Upwork.

LinkedIn