Maison  >  Article  >  Java  >  Comment convertir l'objet Mat d'OpenCV en objet WritableImage de JavaFX ?

Comment convertir l'objet Mat d'OpenCV en objet WritableImage de JavaFX ?

WBOY
WBOYavant
2023-08-18 18:34:211576parcourir

Comment convertir lobjet Mat dOpenCV en objet WritableImage de JavaFX ?

Si vous essayez de lire une image à l'aide de la méthode imread() d'OpenCV, elle renverra un objet Mat. Si vous souhaitez utiliser une fenêtre JavaFX pour afficher le contenu de l'objet Mat résultant, vous devez convertir l'objet Mat en un objet de la classe javafx.scene.image.WritableImage. Pour ce faire, vous devez suivre ces étapes :

  • Encode Mat to MatOfByte - Tout d'abord, vous devez convertir la matrice en matrice d'octets. Vous pouvez utiliser la méthode imencode() de la classe Imgcodecs pour y parvenir.

  • Cette méthode accepte un paramètre de chaîne (spécifie le format de l'image), un objet Mat (représentant l'image) et un objet MatOfByte.

  • Convertir l'objet MatOfByte en tableau d'octets - Convertissez l'objet MatOfByte en tableau d'octets à l'aide de la méthode toArray().

  • Instantiate ByteArrayInputStream - ​​​​Instancier la classe ByteArrayInputStream en passant le tableau d'octets créé à l'étape précédente à l'un de ses constructeurs.

  • Créer un objet BufferedImage - Transmettez l'objet de flux d'entrée créé à l'étape précédente à la méthode read() de la classe ImageIO. Cela renverra un objet BufferedImage.

  • Enfin, appelez la méthode toFXImage() de la classe SwingFXUtils en prenant en paramètre l'objet BufferedImage obtenu à l'étape précédente.

Exemple

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

Sortie

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer