Opencv-gui
OpenCV-GUI
前の章で、OpenCV Javaライブラリを使用して画像を読み込んで保存する方法について説明しました。 それに加えて、AWT/SwingsやJavaFXなどのGUIライブラリを使用して、読み込んだ画像を別のウィンドウに表示することもできます。
マットをバッファリングされたイメージに変換する
画像を読み取るには、メソッド* imread()を使用します。 このメソッドは、読み取った画像を *Matrix の形式で返します。 ただし、このイメージをGUIライブラリ(AWT/SwingsおよびJavaFX)で使用するには、パッケージ java.awt.image.BufferedImage のクラス BufferedImage のオブジェクトとして変換する必要があります。
以下は、OpenCVの Mat オブジェクトを BufferedImage オブジェクトに変換する手順です。
ステップ1:MatをMatOfByteにエンコードする
まず、行列をバイトの行列に変換する必要があります。 クラス Imgcodecs のメソッド* imencode()*を使用して実行できます。 このメソッドの構文は次のとおりです。
このメソッドは、次のパラメータを受け入れます-
- Ext -画像形式(.jpg、.pngなど)を指定する文字列パラメーター
- image -画像のマットオブジェクト
- matOfByte -クラスMatOfByteの空のオブジェクト
以下に示すように、この方法を使用して画像をエンコードします。
ステップ2:MatOfByteオブジェクトをバイト配列に変換する
メソッド* toArray()を使用して、 *MatOfByte オブジェクトをバイト配列に変換します。
ステップ3:InputStreamオブジェクトの準備
前の手順で作成したバイト配列を ByteArrayInputStream クラスのコンストラクターに渡すことにより、InputStreamオブジェクトを準備します。
ステップ4:InputStreamオブジェクトの準備
前の手順で作成した入力ストリームオブジェクトを ImageIO クラスの* read()*メソッドに渡します。 これは、BufferedImageオブジェクトを返します。
AWT/Swingsを使用した画像の表示
AWT/Swingsフレームを使用して画像を表示するには、まず、* imread()メソッドを使用して画像を読み取り、上記の手順に従って *BufferedImage に変換します。
次に、 JFrame クラスをインスタンス化し、以下に示すように、JFrameのContentPaneに作成されたバッファー画像を追加します-
例
次のプログラムコードは、OpenCVライブラリを使用して、画像を*読み取り*、スイングウィンドウで*表示*する方法を示しています。
上記のプログラムを実行すると、次の出力が得られます-
それに加えて、次のように、ロードされた画像を表示するウィンドウを見ることができます-
JavaFXを使用した画像の表示
JavaFXを使用して画像を表示するには、まず* imread()メソッドを使用して画像を読み取り、それを *BufferedImage に変換します。 次に、以下に示すように、BufferedImageをWritableImageに変換します。
この WritableImage オブジェクトを ImageView クラスのコンストラクターに渡します。
例
次のプログラムコードは、OpenCVライブラリを使用して、JavaFXウィンドウで画像を*読み取り* *表示*する方法を示しています。
上記のプログラムを実行すると、次の出力が得られます-
それに加えて、次のように、ロードされた画像を表示するウィンドウを見ることができます-