Java
 Computer >> コンピューター >  >> プログラミング >> Java

JavaのOpenCVでimshow()メソッドの代わりになるものはある?HighGuiクラスによる画像表示方法を解説

結論から言うと、Java版OpenCVではorg.opencv.highguiパッケージに含まれるHighGuiクラスが、C++版のimshow()に相当する役割を担っています。このクラスを使うことで、ウィンドウの作成や操作、そして画像の表示が可能になります。

HighGui.imshow()メソッドの基本

HighGuiクラスのimshow()メソッドを使用すると、ウィンドウ内に画像を表示できます。このメソッドは以下の2つの引数を受け取ります。

  • ウィンドウ名を表す文字列
  • 表示する画像の内容を保持するMatオブジェクト

また、imshow()を呼び出した後にはwaitKey()メソッドを呼び出すことが推奨されています。waitKey()を呼び出さないと、プログラムが即座に終了してしまい、ウィンドウが一瞬で閉じて画像を確認できないことがあります。

サンプルコード

次の例では、画像ファイルを読み込み、グレースケールへ変換した後、Canny法でエッジ(輪郭線)を検出し、元画像・グレースケール画像・エッジ検出結果の3枚の画像を、それぞれ別のウィンドウに表示しています。

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class ImshowExample {
    public static void main(String args[]) {
        // OpenCVのコアライブラリを読み込む
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        // ファイルから画像を読み込む
        Mat src = Imgcodecs.imread("D://images//window.jpg");
        HighGui.imshow("Original Image", src);
        // カラー画像をグレースケールに変換
        Mat gray = new Mat(src.rows(), src.cols(), src.type());
        Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGB2GRAY);
        HighGui.imshow("Gray Scale Image", gray);
        // Canny法によるエッジ検出を適用
        Mat dst = new Mat(src.rows(), src.cols(), src.type());
        Imgproc.Canny(gray, dst, 100, 100*3);
        HighGui.imshow("Edges", dst);
        // キー入力待ちでウィンドウを保持
        HighGui.waitKey();
    }
}

実行結果

上記のプログラムを実行すると、以下のように3つのウィンドウが表示されます。

元画像:

JavaのOpenCVでimshow()メソッドの代わりになるものはある?HighGuiクラスによる画像表示方法を解説

グレースケール画像:

JavaのOpenCVでimshow()メソッドの代わりになるものはある?HighGuiクラスによる画像表示方法を解説

エッジを強調表示した画像:

JavaのOpenCVでimshow()メソッドの代わりになるものはある?HighGuiクラスによる画像表示方法を解説

  1. JavaでOpenCVを使わずに画像をグレースケールに変換する方法

    Javaの標準ライブラリだけを使えば、OpenCVなどの外部ライブラリに頼ることなく、カラー画像をグレースケール(白黒)画像へ変換できます。基本的な考え方はシンプルで、各ピクセルが持つ赤(R)・緑(G)・青(B)の3つの値を取り出し、その平均値を計算して、元のRGB値をその平均値で置き換えるというものです。グレースケール変換の手順各ピクセルから赤・緑・青(RGB)の値を取得する3色の平均値を求める元のRGB値をその平均値に置き換える変更後の色から新しいピクセル値を作成するその新しい値をピクセルに設定するこの処理を画像内のすべてのピクセルに対して繰り返し適用することで、画像全体をグレースケール化

  2. JavaとOpenCVライブラリを使って画像を保存(書き出し)する方法

    OpenCVライブラリを利用すると、画像フィルタリング、幾何学的変換、色空間の変換、ヒストグラム処理など、さまざまな画像処理操作を行うことができます。本記事では、その中でも基本的な操作である「画像の読み込みと保存(書き出し)」の方法を解説します。画像を書き出す(保存する)方法Imgcodecsクラスのimread()メソッドを使って画像を読み込むと、その内容はMat(Matrix)オブジェクトに格納されます。読み込んだ画像をファイルとして保存するには、imwrite()メソッドを使用します。imwrite()メソッドは、以下の2つの引数を受け取ります。file:保存先のファイルパスを表す文字列