Maison > Java > javaDidacticiel > le corps du texte

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

WBOY
Libérer: 2023-08-18 18:34:21
avant
1556 Les gens l'ont consulté

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);
   }
}
Copier après la connexion

Sortie

Image Loaded
javafx.scene.image.WritableImage@142269f2
Copier après la connexion

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!

Étiquettes associées:
source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!