OpenCVのMatオブジェクトをJavaFXのWritableImageオブジェクトに変換するにはどうすればよいですか?

WBOY
リリース: 2023-08-18 18:34:21
転載
1556 人が閲覧しました

OpenCVのMatオブジェクトをJavaFXのWritableImageオブジェクトに変換するにはどうすればよいですか?

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 サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!