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

Cách hiển thị OpenCV Mat object bằng JavaFX

JavaFX dùng ImageView để hiển thị ảnh, nhận đối tượng WritableImage. Cần chuyển Mat sang WritableImage theo quy trình tương tự Swing.

Ví dụ

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
import javax.imageio.ImageIO;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.imgcodecs.Imgcodecs;

public class DisplayingImagesJavaFX extends Application {
    @Override
    public void start(Stage stage) throws IOException {
        WritableImage writableImage = loadImage();
        ImageView imageView = new ImageView(writableImage);
        imageView.setX(50);
        imageView.setY(25);
        imageView.setFitHeight(400);
        imageView.setFitWidth(500);
        imageView.setPreserveRatio(true);
        Group root = new Group(imageView);
        Scene scene = new Scene(root, 600, 400);
        stage.setTitle("Loading an image");
        stage.setScene(scene);
        stage.show();
    }
    public WritableImage loadImage() throws IOException {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        String file = "D:\\images\\tree.jpg";
        Mat image = Imgcodecs.imread(file);
        MatOfByte matOfByte = new MatOfByte();
        Imgcodecs.imencode(".jpg", image, 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[]) {
        launch(args);
    }
}

Kết quả

Cửa sổ JavaFX hiển thị ảnh:

Cách hiển thị OpenCV Mat object bằng JavaFX