Laden und Anzeigen von OpenCV-Bildern

Laden und Anzeigen von OpenCV-Bildern

Laden Sie das Bild (mit cv::imread)

Erstellen Sie ein Fenster mit dem Namen OpenCV (verwenden Sie cv::namedWindow).

Bild im OpenCV-Fenster anzeigen (mit cv::imshow) **

#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
    
    
    String imageName( "../data/HappyFish.jpg" ); // by default
    if( argc > 1)
    {
    
    
        imageName = argv[1];
    }
    Mat image;
    image = imread( imageName, IMREAD_COLOR ); // Read the file
    if( image.empty() )                      // Check for invalid input
    {
    
    
        cout <<  "Could not open or find the image" << std::endl ;
        return -1;
    }
    namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.
    imshow( "Display window", image );                // Show our image inside it.
    waitKey(0); // Wait for a keystroke in the window
    return 0;
}

veranschaulichen

In OpenCV 2 haben wir mehrere Module. Jeder ist für die Bearbeitung eines anderen Bereichs oder einer anderen Methode verantwortlich. Sie können dies am Aufbau der Benutzerhandbücher in diesen Tutorials selbst erkennen. Bevor Sie eines davon verwenden können, müssen Sie zunächst die Header-Dateien einbinden, die den Inhalt jedes einzelnen Moduls deklarieren.

Am Ende verwenden Sie fast immer:


Der Kernteil, das Highgui-Modul, das den Grundbaustein der Bibliothek darstellt, wird hier definiert , da es Funktionen für Eingabe- und Ausgabeoperationen enthält

#include < opencv2 / core.hpp >
#include < opencv2 / imgcodecs.hpp >
#include < opencv2 / highgui.hpp >
#include <iostream>
#include <string>

Wir integrieren auch iostreams, um die Ausgabe und Eingabe über die Konsolenzeile zu erleichtern. Um Datenstruktur- und Funktionsnamenkonflikte mit anderen Bibliotheken zu vermeiden, verfügt OpenCV über einen eigenen Namensraum: cv. Um zu vermeiden, dass jedes dieser cv::-Schlüsselwörter angehängt werden muss, können Sie den Namespace mit der folgenden Zeile in die gesamte Datei importieren:

using namespace cv;

Das Gleiche gilt für die STL-Bibliothek (für Konsolen-I/O). Lassen Sie uns nun die Hauptfunktionen analysieren. Wir beginnen damit, sicherzustellen, dass wir gültige Bildnamensargumente von der Befehlszeile erhalten. Andernfalls machen Sie standardmäßig ein Bild: „HappyFish.jpg“.

   String imageName( "../data/HappyFish.jpg" ); // by default
    if( argc > 1)
    {
    
    
        imageName = argv[1];
    }

Erstellen Sie dann ein Mat-Objekt, das die Daten des geladenen Bildes speichert.

Mat image;

Jetzt rufen wir die Funktion cv::imread auf, die den durch das erste Argument (argv[1]) angegebenen Bildnamen lädt. Der zweite Parameter gibt das Format des gewünschten Bildes an. Das könnte sein:

IMREAD_UNCHANGED(<0)按原样加载图像(包括alpha通道(如果存在)
IMREAD_GRAYSCALE(0)将图像作为强度加载
IMREAD_COLOR(> 0)以RGB格式加载图像
    image = imread( imageName, IMREAD_COLOR ); // Read the file

Vorsichtsmaßnahmen

OpenCV unterstützt Bildformate Windows Bitmap (BMP), tragbare Bildformate (PBM, PGM, ppm) und Sun Raster (SR, Ras). Mit Hilfe von Plugins (Sie müssen angeben, dass Sie sie verwenden möchten, wenn Sie Ihre eigene Bibliothek erstellen, aber im Paket, das wir standardmäßig ausliefern) können Sie auch Bilder wie JPEG (jpeg, jpg, jpe), JPEG 2000 (jp2 - Jasper, Codename CMake), TIFF-Dateien (tiff, tif) und Portable Network Graphics (png). Auch OpenEXR ist eine Möglichkeit.
Nachdem wir überprüft haben, dass die Bilddaten korrekt geladen wurden, möchten wir das Bild anzeigen, also erstellen wir ein OpenCV-Fenster mit der Funktion cv::namedWindow. Sie werden automatisch verwaltet, nachdem OpenCV erstellt wurde. Dazu müssen Sie seinen Namen angeben und angeben, wie mit der Änderung der Größe des darin enthaltenen Bildes umgegangen wird. Vielleicht:

WINDOW_AUTOSIZE wird nur unterstützt, wenn das Qt-Backend nicht verwendet wird. In diesem Fall nimmt die Fenstergröße die Größe des angezeigten Bildes ein. Größenänderung nicht erlaubt!
WINDOW_NORMAL In Qt können Sie dies verwenden, um die Größenänderung von Fenstern zu ermöglichen. Die Größe des Bildes wird entsprechend der aktuellen Fenstergröße angepasst. Mithilfe des |-Operators müssen Sie auch angeben, ob das Bild sein Seitenverhältnis beibehalten soll (WINDOW_KEEPRATIO) (WINDOW_FREERATIO).

namedWindow( "Display window", WINDOW_AUTOSIZE ); // Create a window for display.

zu guter Letzt

Um den Inhalt des OpenCV-Fensters mit einem neuen Bild zu aktualisieren, verwenden Sie die Funktion cv::imshow. Geben Sie den Namen des zu aktualisierenden OpenCV-Fensters und das Bild an, das während dieses Vorgangs verwendet werden soll:

imshow( "Display window", image );                // Show our image inside it.

Da wir möchten, dass unser Fenster angezeigt wird, bis der Benutzer eine Taste drückt (sonst würde das Programm zu schnell enden), verwenden wir die Funktion cv::waitKey, deren einziger Parameter angibt, wie lange in Millisekunden auf Benutzereingaben gewartet werden soll. Null bedeutet ewig warten.

waitKey(0); // Wait for a keystroke in the window

Ergebnis

Kompilieren Sie den Code und führen Sie dann die ausführbare Datei mit dem Bildpfad als Argument aus. Wenn Sie Windows verwenden, enthält die ausführbare Datei natürlich auch eine exe-Erweiterung. Stellen Sie natürlich sicher, dass sich die Bilddatei in der Nähe Ihrer Programmdateien befindet.

./DisplayImage HappyFish.jpg

Sie sollten ein schönes Fenster wie dieses erhalten:
Laden und Anzeigen von OpenCV-Bildern
Fügen Sie hier eine Bildbeschreibung ein

Ich denke du magst

Origin blog.csdn.net/qq_41704415/article/details/123796034
Empfohlen
Rangfolge