OpenCV - Bilder speichern

Um ein Bild aufzunehmen, verwenden wir Geräte wie Kameras und Scanner. Diese Geräte zeichnen numerische Werte des Bildes auf (Beispiel: Pixelwerte). OpenCV ist eine Bibliothek, die die digitalen Bilder verarbeitet. Daher müssen wir diese Bilder für die Verarbeitung speichern.

Das MatDie Klasse der OpenCV-Bibliothek wird zum Speichern der Werte eines Bildes verwendet. Es stellt ein n-dimensionales Array dar und wird zum Speichern von Bilddaten von Graustufen- oder Farbbildern, Voxelvolumina, Vektorfeldern, Punktwolken, Tensoren, Histogrammen usw. verwendet.

Diese Klasse besteht aus zwei Datenteilen: dem header und ein pointer

  • Header - Enthält Informationen wie Größe, Speichermethode und Adresse der Matrix (Größe konstant).

  • Pointer - Speichert die Pixelwerte des Bildes (Variiert weiter).

Die Mattenklasse

Die OpenCV-Java-Bibliothek stellt dieser Klasse denselben Namen zur Verfügung (Mat) innerhalb des Pakets org.opencv.core.

Konstruktoren

Die Mat-Klasse der OpenCV-Java-Bibliothek verfügt über verschiedene Konstruktoren, mit denen Sie das Mat-Objekt erstellen können.

S.No. Konstruktoren und Beschreibung
1

Mat()

Dies ist in den meisten Fällen der Standardkonstruktor ohne Parameter. Wir verwenden dies als Konstruktor, um eine leere Matrix zu erstellen und diese an andere OpenCV-Methoden zu übergeben.

2

Mat(int rows, int cols, int type)

Dieser Konstruktor akzeptiert drei Parameter vom Typ Integer, die die Anzahl der Zeilen und Spalten in einem 2D-Array und den Typ des Arrays (der zum Speichern von Daten verwendet werden soll) darstellen.

3

Mat(int rows, int cols, int type, Scalar s)

Dieser Konstruktor enthält unter Einbeziehung der Parameter des vorherigen zusätzlich ein Objekt der Klasse Scalar als Parameter.

4

Mat(Size size, int type)

Dieser Konstruktor akzeptiert zwei Parameter, ein Objekt, das die Größe der Matrix darstellt, und eine Ganzzahl, die den Typ des Arrays darstellt, das zum Speichern der Daten verwendet wird.

5

Mat(Size size, int type, Scalar s)

Dieser Konstruktor enthält unter Einbeziehung der Parameter des vorherigen zusätzlich ein Objekt der Klasse Scalar als Parameter.

6

Mat(long addr)

7

Mat(Mat m, Range rowRange)

Dieser Konstruktor akzeptiert ein Objekt einer anderen Matrix und ein Objekt der Klasse Range, das den Bereich der Zeilen darstellt, die zum Erstellen einer neuen Matrix verwendet werden sollen.

8

Mat(Mat m, Range rowRange, Range colRange)

Mit den Parametern des vorherigen akzeptiert dieser Konstruktor zusätzlich ein Objekt der Klasse. Bereich, der den Spaltenbereich darstellt.

9

Mat(Mat m, Rect roi)

Dieser Konstruktor akzeptiert zwei Objekte, von denen eines eine andere Matrix und das andere die darstellt Region Of Iam interessantesten.

Note - -

  • Array-Typ. Verwenden Sie CV_8UC1, ..., CV_64FC4, um 1-4-Kanal-Matrizen zu erstellen, oder CV_8UC (n), ..., CV_64FC (n), um Mehrkanal-Matrizen (bis zu CV_CN_MAX-Kanälen) zu erstellen.

  • Der Typ der Matrizen wurde durch verschiedene Felder der Klasse dargestellt CvType welches zum Paket gehört org.opencv.core.

Methoden und Beschreibung

Im Folgenden sind einige der von der Mat-Klasse bereitgestellten Methoden aufgeführt.

S.No. Methoden und Beschreibung
1

Mat col(int x)

Diese Methode akzeptiert einen ganzzahligen Parameter, der den Index einer Spalte darstellt, und ruft diese Spalte ab und gibt sie zurück.

2

Mat row(int y)

Diese Methode akzeptiert einen ganzzahligen Parameter, der den Index einer Zeile darstellt, und ruft diese Zeile ab und gibt sie zurück.

3

int cols()

Diese Methode gibt die Anzahl der Spalten in der Matrix zurück.

4

int rows()

Diese Methode gibt die Anzahl der Zeilen in der Matrix zurück.

5

Mat setTo(Mat value)

Diese Methode akzeptiert ein Objekt der Mat Geben Sie ein und setzt die Array-Elemente auf den angegebenen Wert.

6

Mat setTo(Scalar s)

Diese Methode akzeptiert ein Objekt der Scalar Geben Sie ein und setzt die Array-Elemente auf den angegebenen Wert.

Erstellen und Anzeigen der Matrix

In diesem Abschnitt werden wir unser erstes OpenCV-Beispiel diskutieren. Wir werden sehen, wie eine einfache OpenCV-Matrix erstellt und angezeigt wird.

Im Folgenden sind die Schritte aufgeführt, die zum Erstellen und Anzeigen einer Matrix in OpenCV ausgeführt werden müssen.

Schritt 1: Laden Sie die native OpenCV-Bibliothek

Während Sie Java-Code mit der OpenCV-Bibliothek schreiben, müssen Sie zunächst die native OpenCV-Bibliothek mit der laden loadLibrary(). Laden Sie die native OpenCV-Bibliothek wie unten gezeigt.

//Loading the core library 
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Schritt 2: Instanziieren Sie die Mat-Klasse

Instanziieren Sie die Mat-Klasse mit einer der zuvor in diesem Kapitel genannten Funktionen.

//Creating a matrix 
Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));

Schritt 3: Füllen Sie die Matrix mit den Methoden

Sie können bestimmte Zeilen / Spalten einer Matrix abrufen, indem Sie Indexwerte an die Methoden übergeben row()/col().

Und Sie können diese Werte mit einer der Varianten von festlegen setTo() Methoden.

//Retrieving the row with index 0 
Mat row0 = matrix.row(0); 
     
//setting values of all elements in the row with index 0 
row0.setTo(new Scalar(1)); 
     
//Retrieving the row with index 3 
Mat col3 = matrix.col(3);  
     
//setting values of all elements in the row with index 3 
col3.setTo(new Scalar(3));

Example

Mit dem folgenden Programmcode können Sie mithilfe der OpenCV-Bibliothek eine einfache Matrix in Java erstellen und anzeigen.

import org.opencv.core.Core; 
import org.opencv.core.Mat;  
import org.opencv.core.CvType;  
import org.opencv.core.Scalar;   

class DisplayingMatrix { 
   public static void main(String[] args) {     
      //Loading the core library 
      System.loadLibrary(Core.NATIVE_LIBRARY_NAME);     

      //Creating a matrix 
      Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));  

      //Retrieving the row with index 0 
      Mat row0 = matrix.row(0);

      //setting values of all elements in the row with index 0 
      row0.setTo(new Scalar(1)); 

      //Retrieving the row with index 3 
      Mat col3 = matrix.col(3);  

      //setting values of all elements in the row with index 3 
      col3.setTo(new Scalar(3)); 

      //Printing the matrix 
      System.out.println("OpenCV Mat data:\n" + matrix.dump()); 
   } 
}

Wenn Sie das obige Programm ausführen, erhalten Sie die folgende Ausgabe:

OpenCV Mat data: 
[  1,   1,   1,   3,   1; 
   0,   0,   0,   3,   0; 
   0,   0,   0,   3,   0; 
   0,   0,   0,   3,   0; 
   0,   0,   0,   3,   0]

Laden des Bildes mit der JavaSE-API

Das BufferedImage Klasse der java.awt.image.BufferedImage Paket wird verwendet, um ein Bild und die zu speichern ImageIO Klasse des Pakets import javax.imageio Bietet Methoden zum Lesen und Schreiben von Bildern.

Example

Mit dem folgenden Programmcode können Sie Bilder mithilfe der JavaSE-Bibliothek laden und speichern.

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO;
  
public class LoadingImage_JSE_library {
   public static void main( String[] args ) throws IOException {
      //Input File 
      File input = new File("C:/EXAMPLES/OpenCV/sample.jpg");
          
      //Reading the image 
      BufferedImage image = ImageIO.read(input);
      
      //Saving the image with a different name
      File ouptut = new File("C:/OpenCV/sample.jpg");
      ImageIO.write(image, "jpg", ouptut);
         
      System.out.println("image Saved");
   } 
}

Wenn Sie das obige Programm ausführen, erhalten Sie die folgende Ausgabe:

image Saved

Wenn Sie den angegebenen Pfad öffnen, können Sie das gespeicherte Bild wie folgt beobachten: