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

JavaとOpenCVでポリゴン(凸多角形)を描画する方法をわかりやすく解説

すべての内角が180度未満であるポリゴン(多角形)は「凸多角形」と呼ばれます。Java版OpenCVライブラリのorg.opencv.imgprocパッケージにはImgprocクラスが用意されており、このクラスのfillConvexPoly()メソッドを呼び出すことで、凸多角形を簡単に描画できます。

なお、凹みのある多角形(凹多角形)を描きたい場合は、代わりにfillPoly()メソッドを使用してください。fillConvexPoly()は凸多角形専用の高速な描画メソッドです。

fillConvexPoly()メソッドのパラメータ

fillConvexPoly()メソッドは、以下の3つの引数を受け取ります。

  • Matオブジェクト:ポリゴンを描画する対象となる画像

  • MatOfPointオブジェクト:ポリゴンの頂点となる座標点の集合

  • Scalarオブジェクト:ポリゴンの塗りつぶし色(BGR形式)

サンプルコード

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

public class DrawingConvexPolygon {
    public static void main(String args[]) {
        // OpenCVのコアライブラリを読み込む
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

        // 元画像をMatオブジェクトとして読み込む
        Mat src = Imgcodecs.imread("D:\\images\\blank.jpg");

        // ポリゴンの頂点座標を定義する
        MatOfPoint points = new MatOfPoint(
            new Point(108, 71), new Point(232, 52),
            new Point(321, 161), new Point(269, 250),
            new Point(126, 232), new Point(108, 71)
        );

        // 塗りつぶし色を指定する(BGR値:64, 64, 64 のダークグレー)
        Scalar color = new Scalar(64, 64, 64);

        // 凸多角形を塗りつぶして描画する
        Imgproc.fillConvexPoly(src, points, color);

        // 結果画像を保存してウィンドウに表示する
        Imgcodecs.imwrite("convex_polygon.jpg", src);
        HighGui.imshow("Drawing a polygon", src);
        HighGui.waitKey();
    }
}

実行結果

上記のプログラムをコンパイルして実行すると、読み込んだ画像の上に指定した6つの頂点を結ぶ凸多角形がダークグレーで塗りつぶされ、次のようなウィンドウが表示されます。同時に、カレントディレクトリにconvex_polygon.jpgというファイル名で結果画像が保存されます。

JavaとOpenCVでポリゴン(凸多角形)を描画する方法をわかりやすく解説

ポイントまとめ

  • 頂点はPointオブジェクトの配列として定義し、MatOfPointに渡します。

  • 色はBGR順で指定するため、赤くしたい場合はnew Scalar(0, 0, 255)のようにします。

  • 最後の頂点を最初の頂点と同じ座標にすると、図形が確実に閉じられます。

  1. JavaとOpenCVのflip()メソッドで画像を反転させる方法

    JavaでOpenCVを使用して画像を反転(フリップ)させたい場合、Coreクラスが提供するflip()メソッドを利用します。このメソッドは、画像をX軸・Y軸に沿って反転させることができ、以下の3つの引数を受け取ります。src:元画像のデータを格納したソース行列(Matオブジェクト)dst:処理結果を格納するための空の行列(Matオブジェクト)flipCode:反転の方向を指定するコード(0=X軸方向の反転、正の値=Y軸方向の反転、負の値=両軸方向の反転)画像を反転させる手順OpenCVで画像を反転させるには、次の手順に従います。loadLibrary()メソッドを使用して、OpenCVのコア

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

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