Jika anda cuba membaca imej menggunakan kaedah imread() OpenCV, ia akan mengembalikan objek Mat. Jika anda ingin menggunakan tetingkap JavaFX untuk memaparkan kandungan objek Mat yang terhasil, anda perlu menukar objek Mat kepada objek kelas javafx.scene.image.WritableImage. Untuk melakukan ini, anda perlu mengikuti langkah berikut:
Ekodkan Mat kepada MatOfByte - Pertama, anda perlu menukar matriks kepada matriks bait. Anda boleh menggunakan kaedah imencode() kelas Imgcodecs untuk mencapai ini.
Kaedah ini menerima parameter rentetan (menentukan format imej), objek Mat (mewakili imej) dan objek MatOfByte.
Tukar objek MatOfByte kepada tatasusunan bait - Tukar objek MatOfByte kepada tatasusunan bait menggunakan kaedah toArray().
Instantiate ByteArrayInputStream - Instantiate kelas ByteArrayInputStream dengan menghantar tatasusunan bait yang dicipta dalam langkah sebelumnya kepada salah satu pembinanya.
Buat objek BufferedImage - Lulus objek aliran input yang dibuat dalam langkah sebelumnya kepada kaedah baca() kelas ImageIO. Ini akan mengembalikan objek BufferedImage.
Akhir sekali, panggil kaedah toFXImage() kelas SwingFXUtils dengan mengambil objek BufferedImage yang diperolehi dalam langkah sebelumnya sebagai parameter.
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
Atas ialah kandungan terperinci Bagaimana untuk menukar objek Mat OpenCV kepada objek WritableImage JavaFX?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!