Heim > Java > javaLernprogramm > 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
Freigeben: 2023-08-18 18:34:21
nach vorne
1587 Leute haben es durchsucht

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);
   }
}
Nach dem Login kopieren

Ausgabe

Image Loaded
javafx.scene.image.WritableImage@142269f2
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage