Verwenden Sie OpenCV in Rust

Sahil Bhosale 15 Februar 2024
  1. Rust-Befehle
  2. Rost installieren
  3. Beginnen Sie mit Rost
  4. Verwenden Sie OpenCV in Rust
Verwenden Sie OpenCV in Rust

Rust ist die Programmiersprache, die beim Schreiben schneller (in Bezug auf die Ausführungsgeschwindigkeit) und authentischerer Software hilft. Es befasst sich mit der Speicherverwaltung mit einem umfangreichen Typsystem und Besitzmodell.

Es ist eine statisch kompilierte Sprache, d. h. wenn wir ein Rust-Programm schreiben, können wir es in eine ausführbare Binärdatei kompilieren, und diese Datei kann in jedem anderen System ausgeführt werden, auf dem Rust nicht installiert ist. Dies unterscheidet sich von anderen Sprachen, da sie einen Interpreter benötigen, um den Code auszuführen.

Es ist auch gut im Umgang mit Fehlern, dem Auffangen von Fehlern, der Datendarstellung und der Parallelität. Diese Sprache wird Anfängern nicht empfohlen; zum besseren Verständnis sollten Sie mit einer oder mehreren Programmiersprachen vertraut sein.

Rust-Befehle

Lassen Sie uns zunächst einen grundlegenden Überblick über einige Rust-Befehle erhalten:

  • rustc: rustc ist ein Rust-Compiler, der zum Kompilieren des Rust-Codes verwendet wird. Es nimmt den Eingabecode in Rust und kompiliert ihn in Binärcode/maschinenlesbaren Code.
  • rustup: Der Befehl rustup wird verwendet, um Rust zu installieren und zu aktualisieren.
  • cargo: Dies ist das Build-System und der Paketmanager von Rust, ähnlich wie andere Sprachen wie pip für Python, gem für Ruby und npm für JavaScript.

Die restlichen Befehle können im Terminal mit cargo überprüft werden.

Rost installieren

Sie können diesen Schritt überspringen, wenn Sie Rust bereits auf Ihrem System installiert haben. Wenn Sie Rust nicht auf Ihrem System installiert haben, können Sie die folgenden Schritte für Ihr System ausführen:

Für das Linux/Mac-System

Um Rust im Unix-System zu installieren, kopieren Sie den folgenden Befehl, fügen Sie ihn in Ihr Terminal ein und drücken Sie Enter.

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

Dieser Code lädt Rust herunter und installiert es auf Ihrem System.

Wenn nach Installationsoptionen gefragt wird, möchten wir uns für die Standardinstallation entscheiden, also wählen wir Installation fortsetzen (Standard), indem wir 1 eingeben und Enter drücken.

Nach dem Herunterladen sehen Sie am Ende des Bildschirms "Rust is installed now. Great!" und darunter "Press the Enter key to continue", also drücken wir Enter und schließen Sie das Terminal.

Um zu überprüfen, ob Rust korrekt installiert wurde, können wir wieder ein neues Terminal öffnen und mit dem folgenden Befehl die Rust-Version anzeigen.

rustc --version

Wenn die Versionsnummer, der Commit-Hash und das Commit-Datum angezeigt werden, können wir sagen, dass Rust erfolgreich installiert wurde.

Beginnen Sie mit Rost

Gehen Sie zuerst zum Terminal und geben Sie den folgenden Code ein. Denken Sie daran, dass der Pfad, in dem Rust installiert ist, derselbe Pfad im Terminal sein sollte:

cargo

Dadurch werden alle Pakete und Befehle angezeigt, die in Rust verwendet werden.

Geben Sie dann den folgenden Code ein, um ein neues Projekt in Rust mit cargo zu erstellen. Dies ist ein binär codiertes Projekt mit dem Namen opencv-rust.

cargo new --bin opencv-rust

Nun sehen Sie auf Ihrem Bildschirm die Ausgabe "Created binary (application) opencv-rust package". Mit diesem Befehl haben wir eine neue Binärdatei namens opencv-rust erstellt.

Öffnen Sie nun dieses Projekt mit dem folgenden Befehl.

cd opencv-rust

Dadurch wird Ihr Pfad aktualisiert und Ihr Projekt geöffnet. Um nun Code für dieses Projekt zu schreiben, geben Sie Folgendes ein:

code .

Dadurch wird Ihr Visual Studio-Code geöffnet.

Gehen Sie nun links in die Datei main.rs in src. Wählen und öffnen Sie main.rs; Auf der rechten Seite sehen wir einen bereits vorhandenen Boilerplate-Code. Gehen Sie dann mit Ctrl+Shift+` zum VSCode-Terminal und führen Sie die folgenden Befehle aus.

cargo build
cargo run

Dadurch werden Pakete und Abhängigkeiten kompiliert und der Code ausgeführt. Im VSCode-Terminal können wir die Ausgabe des Kesselcodes sehen.

Verwenden Sie OpenCV in Rust

Vor der Installation von OpenCV müssen wir einige Paket-Compiler und ein Projekt-Build-System für OpenCV installieren. Zur Installation müssen wir Homebrew oder Brew, einen Paketmanager für Mac, installieren. Wir können Brew über diesen Link installieren.

Danach installieren wir nun die folgenden Pakete und erstellen nacheinander Systeme für OpenCV. Das erste ist die pkg-config, ein Tool zum Kompilieren von Bibliotheken.

brew install pkg-config

Zweitens wird das CMake-System installiert, ein Build-System, das die Erstellung nativer Bibliotheken unterstützt. Folgen Sie dazu dem folgenden Code.

brew install cmake

Installieren Sie nun das OpenCV-Paket und llvm, das alle Tools, Bibliotheken und Header-Dateien enthält, die zum Verarbeiten von OpenCV und zum Konvertieren in Objektdateien erforderlich sind.

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

libopencv-dev installiert OpenCV-Bibliotheken. Nach diesem Schritt ist es wichtig, den Umgebungspfad zu exportieren.

Wir müssen ein OpenCV-Programm erstellen, um zu überprüfen, ob OpenCV korrekt funktioniert. Auf der linken Seite finden wir die Datei Cargo.toml. Klicken Sie darauf, und die Datei wird auf der rechten Seite geöffnet, dann die Abhängigkeiten unten.

Fügen Sie unter Abhängigkeiten den folgenden Code hinzu.

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

Um den Versionsnamen zu finden, können wir die Website crates.io besuchen, OpenCV durchsuchen und die neueste verfügbare Version finden. Beim Schreiben dieses Artikels haben wir festgestellt, dass die neueste Version 0.73.0 ist, also haben wir sie in VSCode aktualisiert.

Gehen Sie nun zur Datei main.rs in src und schreiben Sie das einfache OpenCV-Rust-Programm unten.

Dies ist ein einfacher Rust-Code, der ein Bild mit OpenCV horizontal spiegelt.

Codeschnipsel - (Rost):

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(())
}

Zuerst haben wir einige Methoden aus den Bibliotheken anyhow und opencv importiert: Result, Mat, Vector und imgcodecs, wie oben gezeigt. Dann haben wir eine Haupt-Funktion erstellt, die ein Ergebnis zurückgibt.

Wir verwenden Result aus der anyhow-Bibliothek, um die Fehler in der Ausgabe automatisch zu behandeln.

Um das Quellbild in unserem Rust-Code zu lesen, müssen wir das imread von OpenCV aus den imgcodecs verwenden und es in der source_img-Variable speichern. Für dieses Beispiel verwenden wir ein Autobild, dessen Dateiname und Erweiterung car.png sind.

Nachdem wir das Bild gelesen haben, müssen wir ein destination_Arr erstellen, in dem wir das Mat, ein Mehrkanal-Array, passieren. Um das Bild horizontal zu spiegeln, müssen wir das flip aus der OpenCV-Bibliothek verwenden und source_img, destination_arr und 1 an die flip-Methode übergeben.

Der letzte Parameter, 1, dreht das Bild horizontal. Wenn Sie das Bild vertikal spiegeln möchten, können Sie statt 1 auch 0 übergeben.

Um das gespiegelte Bild als Ausgabe zu speichern, müssen wir die imwrite-Methode von OpenCV verwenden. Hier können Sie der Ausgabedatei einen beliebigen Namen geben, indem Sie den Dateinamen an den ersten Parameter übergeben.

Schließlich sind wir bereit, den Code auszuführen. Wir müssen die beiden folgenden Befehle ausführen, um den Code zu erstellen und auszuführen.

cargo build
cargo run

Ausgang:

OpenCV Rust-Ausgabe

Dadurch wird der Rust-Code kompiliert und ausgeführt. Und die Ausgabe für diesen Befehl ist oben gezeigt.

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