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.
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); } }
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!