Heim  >  Artikel  >  Java  >  Wie konvertiere ich das Mat-Objekt von OpenCV in das WritableImage-Objekt von JavaFX?

Wie konvertiere ich das Mat-Objekt von OpenCV in das WritableImage-Objekt von JavaFX?

WBOY
WBOYnach vorne
2023-08-18 18:34:211576Durchsuche

Wie konvertiere ich das Mat-Objekt von OpenCV in das WritableImage-Objekt von JavaFX?

Wenn Sie versuchen, ein Bild mit der Methode imread() von OpenCV zu lesen, wird ein Mat-Objekt zurückgegeben. Wenn Sie ein JavaFX-Fenster verwenden möchten, um den Inhalt des resultierenden Mat-Objekts anzuzeigen, müssen Sie das Mat-Objekt in ein Objekt der Klasse javafx.scene.image.WritableImage konvertieren. Dazu müssen Sie die folgenden Schritte ausführen:

  • Mat in MatOfByte kodieren – Zuerst müssen Sie die Matrix in eine Byte-Matrix konvertieren. Sie können dazu die Methode imencode() der Imgcodecs-Klasse verwenden.

  • Diese Methode akzeptiert einen String-Parameter (gibt das Bildformat an), ein Mat-Objekt (das das Bild darstellt) und ein MatOfByte-Objekt.

  • MatOfByte-Objekt in Byte-Array konvertieren - MatOfByte-Objekt mit der toArray()-Methode in Byte-Array konvertieren.

  • Instantiate ByteArrayInputStream – ​​Instanziieren Sie die ByteArrayInputStream-Klasse, indem Sie das im vorherigen Schritt erstellte Byte-Array an einen ihrer Konstruktoren übergeben.

  • BufferedImage-Objekt erstellen – Übergeben Sie das im vorherigen Schritt erstellte Eingabestream-Objekt an die read()-Methode der ImageIO-Klasse. Dadurch wird ein BufferedImage-Objekt zurückgegeben.

  • Zum Schluss rufen Sie die Methode toFXImage() der SwingFXUtils-Klasse auf, indem Sie das im vorherigen Schritt erhaltene BufferedImage-Objekt als Parameter verwenden.

Beispiel

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.imgcodecs.Imgcodecs;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.WritableImage;
public class Mat2WritableImage {
   public static WritableImage Mat2WritableImage(Mat mat) throws IOException{
      //Encoding the image
      MatOfByte matOfByte = new MatOfByte();
      Imgcodecs.imencode(".jpg", mat, matOfByte);
      //Storing the encoded Mat in a byte array
      byte[] byteArray = matOfByte.toArray();
      //Preparing the Buffered Image
      InputStream in = new ByteArrayInputStream(byteArray);
      BufferedImage bufImage = ImageIO.read(in);
      System.out.println("Image Loaded");
      WritableImage writableImage = SwingFXUtils.toFXImage(bufImage, null);
      return writableImage;
   }
   public static void main(String args[]) throws Exception {
      //Loading the OpenCV core library
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      //Reading the Image from the file
      String file = "C:/EXAMPLES/OpenCV/sample.jpg";
      Mat image = Imgcodecs.imread(file);
      WritableImage obj = Mat2WritableImage(image);
      System.out.println(obj);
   }
}

Ausgabe

Image Loaded
javafx.scene.image.WritableImage@142269f2

Das obige ist der detaillierte Inhalt vonWie konvertiere ich das Mat-Objekt von OpenCV in das WritableImage-Objekt von JavaFX?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen