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.
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
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!