OpenCV の imread() メソッドを使用して画像を読み取ろうとすると、Mat オブジェクトが返されます。 JavaFX ウィンドウを使用して、結果として得られる Mat オブジェクトの内容を表示する場合は、Mat オブジェクトを javafx.scene.image.WritableImage クラスのオブジェクトに変換する必要があります。これを行うには、次の手順に従う必要があります。
Mat を MatOfByte にエンコードする - まず、行列をバイト行列に変換する必要があります。これを実現するには、Imgcodecs クラスの imencode() メソッドを使用します。
このメソッドは、文字列パラメーター (画像形式を指定)、Mat オブジェクト (画像を表す)、および MatOfByte オブジェクトを受け入れます。
MatOfByte オブジェクトをバイト配列に変換する - toArray() メソッドを使用して MatOfByte オブジェクトをバイト配列に変換します。
ByteArrayInputStream のインスタンス化 - 前の手順で作成したバイト配列をコンストラクターの 1 つに渡して、ByteArrayInputStream クラスをインスタンス化します。
BufferedImage オブジェクトの作成 - 前の手順で作成した入力ストリーム オブジェクトを ImageIO クラスの read() メソッドに渡します。これにより、BufferedImage オブジェクトが返されます。
最後に、前の手順で取得した BufferedImage オブジェクトをパラメーターとして取得して、SwingFXUtils クラスの toFXImage() メソッドを呼び出します。
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
以上がOpenCVのMatオブジェクトをJavaFXのWritableImageオブジェクトに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。