JavaとOpenCVで塗りつぶしポリゴン(多角形)を描画する方法
Java版OpenCVライブラリの org.opencv.imgproc パッケージには、画像処理のための各種メソッドを提供する Imgproc クラスが含まれています。塗りつぶされたポリゴン(多角形)を描画したい場合は、このクラスが持つ fillPoly() メソッドを呼び出します。
fillPoly() メソッドのパラメータ
fillPoly() メソッドは、以下の引数を受け取ります。
- ポリゴンを描画する対象の画像を表す Mat オブジェクト
- MatOfPoint 型のオブジェクトを格納した List オブジェクト(ポリゴンの頂点座標)
- ポリゴンの色を表す Scalar オブジェクト
- 線の種類(ラインタイプ)を表す整数値
ラインタイプについて
線の種類には、Imgproc.LINE_8(8連結線)、Imgproc.LINE_4(4連結線)、Imgproc.LINE_AA(アンチエイリアス付きの滑らかな線)などを指定できます。
サンプルコード
以下は、白紙の画像上に塗りつぶされたポリゴンを描画するJavaプログラムの例です。
import java.util.ArrayList;
import java.util.List;
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 DrawingFilledPolygon {
public static void main(String args[]) {
// OpenCVのコアライブラリを読み込む
System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
// 元画像をMatオブジェクトとして読み込む
Mat src = Imgcodecs.imread("D:\\images\\blank.jpg");
// ポリゴンを描画する
List<MatOfPoint> list = new ArrayList<MatOfPoint>();
list.add(new MatOfPoint (
new Point(208, 71), new Point(421, 161),
new Point(332, 52), new Point(369, 250),
new Point(421, 161), new Point(226, 232),
new Point(369, 250), new Point(208, 71),
new Point(226, 232), new Point(332, 52)));
// ポリゴンの色を指定(BGR形式)
Scalar color = new Scalar(64, 64, 64);
// 線の種類を指定
int lineType = Imgproc.LINE_8;
// 塗りつぶしポリゴンを描画
Imgproc.fillPoly(src, list, color, lineType);
// 結果画像を保存して表示する
Imgcodecs.imwrite("filled_polygon.jpg", src);
HighGui.imshow("Drawing a polygon", src);
HighGui.waitKey();
}
}コードのポイント
System.loadLibrary()でネイティブライブラリを読み込んでから処理を開始します。- 頂点座標は
Pointオブジェクトの配列としてMatOfPointに渡し、それをListに追加します。 - 色は
ScalarクラスでBGR(青・緑・赤)の順に指定します。ここでは暗めのグレー(64, 64, 64)を設定しています。
実行結果
このプログラムを実行すると、指定した頂点を結んだ塗りつぶしポリゴンが描画されたウィンドウが表示されます。同時に、結果の画像ファイルも保存されます。

-
JavaとOpenCVで線を描画する方法をわかりやすく解説
Java版OpenCVライブラリのorg.opencv.imgprocパッケージには、Imgprocというクラスが含まれています。画像に直線を描画するには、このクラスが提供するline()メソッドを呼び出します。 line()メソッドのパラメータ line()メソッドは、以下のパラメータを受け取ります。 Matオブジェクト ― 直線を描画する対象となる画像を表します。 Pointオブジェクト2つ ― 直線の始点と終点の座標を表します。 Scalarオブジェクト ― 直線の色をBGR形式で指定します。 整数値 ― 直線の太さを指定します(デフォルト値:1)。 サンプルコード 以下は、白紙の画
-
JavaとOpenCVライブラリを使って画像を保存(書き出し)する方法
OpenCVライブラリを利用すると、画像フィルタリング、幾何学的変換、色空間の変換、ヒストグラム処理など、さまざまな画像処理操作を行うことができます。本記事では、その中でも基本的な操作である「画像の読み込みと保存(書き出し)」の方法を解説します。画像を書き出す(保存する)方法Imgcodecsクラスのimread()メソッドを使って画像を読み込むと、その内容はMat(Matrix)オブジェクトに格納されます。読み込んだ画像をファイルとして保存するには、imwrite()メソッドを使用します。imwrite()メソッドは、以下の2つの引数を受け取ります。file:保存先のファイルパスを表す文字列