Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Cách chuyển đổi OpenCV Mat sang JavaFX WritableImage

Khi đọc ảnh bằng imread() của OpenCV, kết quả là đối tượng Mat. Để hiển thị trên JavaFX, cần chuyển sang javafx.scene.image.WritableImage theo các bước:

  1. Mã hóa Mat sang MatOfByte – dùng Imgcodecs.imencode() với định dạng (ví dụ ".jpg"), Mat nguồn, MatOfByte đích.
  2. Chuyển MatOfByte sang mảng byte – gọi toArray().
  3. Tạo ByteArrayInputStream – từ mảng byte.
  4. Tạo BufferedImage – dùng ImageIO.read() đọc từ InputStream.
  5. Chuyển sang WritableImage – dùng SwingFXUtils.toFXImage().

Ví dụ

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 {
        MatOfByte matOfByte = new MatOfByte();
        Imgcodecs.imencode(".jpg", mat, matOfByte);
        byte[] byteArray = matOfByte.toArray();
        InputStream in = new ByteArrayInputStream(byteArray);
        BufferedImage bufImage = ImageIO.read(in);
        System.out.println("Image Loaded");
        return SwingFXUtils.toFXImage(bufImage, null);
    }
    public static void main(String args[]) throws Exception {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        String file = "C:/EXAMPLES/OpenCV/sample.jpg";
        Mat image = Imgcodecs.imread(file);
        WritableImage obj = Mat2WritableImage(image);
        System.out.println(obj);
    }
}

Kết quả

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