Rumah > Java > javaTutorial > Bagaimana untuk menukar objek Mat OpenCV kepada objek WritableImage JavaFX?

Bagaimana untuk menukar objek Mat OpenCV kepada objek WritableImage JavaFX?

WBOY
Lepaskan: 2023-08-18 18:34:21
ke hadapan
1587 orang telah melayarinya

Bagaimana untuk menukar objek Mat OpenCV kepada objek WritableImage JavaFX?

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.

Contoh

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);
   }
}
Salin selepas log masuk

Output

Image Loaded
javafx.scene.image.WritableImage@142269f2
Salin selepas log masuk

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!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan