Java OpenCV Lv5 〜Matクラスで描画処理〜

イントロダクション

今までの学習で、OpenCV(JavaCV)でフィルター処理(①)と描画処理(②)ができることがわかりました。

  1. Java OpenCV Lv2 〜画像を表示する〜 シンプルに画像を表示する
  2. Java OpenCV Lv3 〜画像の平滑化(smooth())〜 ①
  3. Java OpenCV Lv3 〜画像にガウシアンフィルタ(GaussianBlur())〜 ①
  4. Java OpenCV Lv3 〜画像に中央値フィルタ(medianBlur())〜 ①
  5. Java OpenCV Lv4 〜画像の中身をみてみる〜 ②

Gitからのプロジェクト取得


イメージファイル(PNG, JPGなど)の中身は数値型の配列になっていることがわかったので、次はそいつらをコントロールする方法を学びます。

<参考サイト>

MatクラスのJavaDoc

OpenCVのチュートリアル

RBGの値と色の表

学習ポイント

  1. 数値型の配列([0, 255, 255, 0, ...])の値はRGBが割り当てられていることを確認
  2. Matクラスでの描画方法(線を引く)

早速実装に入ります。

注意点として、白はデータ上「255」になります。なので白い背景を使用したら全部が「255」になります。

そして、実装するときには以下の手順でやります。

  1. OpenCVのライブラリを読み込む(staticで読み込みます)
  2. white100x100.png(背景)をロードする
  3. 線の開始点、終点を指定する(Point)
  4. Imgproc.line()で描画する

描画メソッドの参考

<実行結果>

<ソース(OpenCVTest5.java>

/**
 * メインメソッド、書き方は決まっている。
 * イメージファイルを読み込んで線を引く
 * 
 * @param argsプログラム引数
 */
public static void main(String[] args) {
	// 100x100の白いPNGからのデータを作成する
		Mat src = Imgcodecs.imread(OpenCVTest5.class.getResource("/images/white100x100.png").getPath());
	Point pt1 = new Point(0,0);
	Point pt2 = new Point(100,100);
	Imgproc.line(src, pt1, pt2, new Scalar(240, 255, 240), 4);

	System.out.println(src.dump());
	// 自作のJFrame拡張クラス
	new ViewFrame(src);
}

Imageデータを編集(描画)してから、表示に使用しているViewFrameクラスはjavax.swingパッケージ(Swing)を使用しています。

<自分で試す手順>

  1. Eclipseをセットアップする
  2. 関連ページ一覧のOpenCV(JavaCV)のセットアップを行う
  3. Gitから作成したソース、リソースをダウンロード
  4. Eclipseでプログラムを実行する

関連ページ一覧に補足になるような記事があります。

関連ページ一覧

Eclipse セットアップ

  1. Java Install Eclipse〜開発ツールのインストール〜
  2. TensorFlow C++環境〜EclipseにCDTをインストール〜
  3. Setup OpenGL with Java〜JOGLを使う準備 for Eclipse〜
  4. Eclipse Meven 開発手順〜プロジェクトの作成〜
  5. Java OpenCV 環境セットアップ(on Mac)

OpenCv

  1. Java OpenCV 環境セットアップ(on Mac)
  2. Java OpenCv Lv1 〜入門: 写真の表示〜
  3. Java OpenCV Lv2 〜画像を表示する〜
  4. Java OpenCV Lv3 〜画像の平滑化(smooth())〜
  5. Java OpenCV Lv3 〜画像にガウシアンフィルタ(GaussianBlur())〜
  6. Java OpenCV Lv3 〜画像に中央値フィルタ(medianBlur())〜
  7. Java OpenCV Lv4 〜画像の中身をみてみる〜
  8. Java OpenCV Lv5 〜Matクラスで描画処理〜
  9. Java OpenCV Lv6 〜Matクラスで背景から作成してみる〜
  10. Java OpenCV Lv7 〜MatクラスでEllipseしてみる〜
  11. Java OpenCV Lv9 〜画像編集「足し算」(cvAdd)〜
  12. Java OpenCV Lv9 〜画像編集「引き算」(cvSubtract)〜
  13. Java OpenCV Lv9 〜画像の掛け算〜
  14. Java OpenCV Lv10 〜行列演算Mat#submat()〜
  15. Java OpenCv Lv10〜画像の平均値をだす〜