Java OpenCV Lv8 〜ROIについて〜

イントロダクション

前回やった、Ellipseメソッドは今後触れることにします。下の本を読むとまだ出てこないみたいです。そんなわけで!やっとこの本に戻ってきました。

ROIについて

画像処理をするときに焦点を絞って処理する機能のようです。

兎にも角にも動かさないと始まらないので。。。

参考サイト:OpenCV Basics

参考にしたコード(ページ) (Stack Overfllow)

<表示するイメージファイル>

<実行結果1「単純にイメージファイルを表示>

<ソース1>

/**
 * メインメソッド、書き方は決まっている。
 * イメージファイルを読み込んで線を引く
 * 
 * @param argsプログラム引数
 */
public static void main(String[] args) {
	long start = System.currentTimeMillis();
	// 100x100の白いPNGからのデータを作成する
	Mat src = Imgcodecs.imread(OpenCVTest8.class.getResource("/images/mountain.png").getPath());

	// 自作のJFrame拡張クラス
	ViewFrame frame = new ViewFrame(new Mat(src, roi));
	System.out.println("実行時間: " + (System.currentTimeMillis() - start) + "ミリ秒");
}

ViewFremeクラスはGitを参照ください。

ぱっと見では「Macのデスクトップなんぢゃね?」となりますが、ちゃんとSwingしてます。上の部分に画面タイトル「Show Image」が表示してあります。

ついでに下の部分に「実行時間: 847ミリ秒」と表示しています。

ここからが勝負

まずは、トリミングをして見ます。表示するイメージファイルは「798x503」のサイズなので、座標(100,100)を指定して幅と高さも100にしています。

<実行結果:トリミングしてみる>

サイズが100x100なので小さくなっています。ちなみに処理時間は200ミリ秒ほど短縮しています。

<ソース2>

/**
 * メインメソッド、書き方は決まっている。
 * イメージファイルを読み込んで線を引く
 * 
 * @param argsプログラム引数
 */
public static void main(String[] args) {
	long start = System.currentTimeMillis();
	// 100x100の白いPNGからのデータを作成する
	Mat src = Imgcodecs.imread(OpenCVTest8.class.getResource("/images/mountain.png").getPath());
        /* トリミングを行なってみる
	 * x座標:100, y座標:100, 幅: 100, 高さ:100
	 */
	Rect roi = new Rect(100, 100, 100, 100);
	// 自作のJFrame拡張クラス
	ViewFrame frame = new ViewFrame(new Mat(src, roi));
	System.out.println("実行時間: " + (System.currentTimeMillis() - start) + "ミリ秒");
}

赤い字の部分が<ソース1>と違う部分です。

本日の目玉!

画像の部分修正です。今回は画面の左上の方に白い四角を描きました。

見辛いので色をつけましたが。。。イマイチ!


ソース3> ※Gitからソースをダウンロードできます。

/**
 * メインメソッド、書き方は決まっている。
 * イメージファイルを読み込んで線を引く
 * 
 * @param argsプログラム引数
 */
public static void main(String[] args) {
	long start = System.currentTimeMillis();
	// 100x100の白いPNGからのデータを作成する
	Mat src = Imgcodecs.imread(OpenCVTest8.class.getResource("/images/mountain.png").getPath());
	/* トリミングを行なってみる
	 * x座標:100, y座標:100, 幅: 100, 高さ:100
	 */
	Rect rect = new Rect(100, 100, 100, 100);
	// 領域を指定、白の資格を描く
	Imgproc.rectangle(src, new Point(100, 100), new Point(200, 200), new Scalar(255, 255, 255));
	ViewFrame frame = new ViewFrame(src);
	System.out.println("実行時間: " + (System.currentTimeMillis() - start) + "ミリ秒");
		
	}

関連ページ一覧

  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 Lv4 〜画像の中身をみてみる〜
  7. Java OpenCV Lv5 〜Matクラスで描画処理〜
  8. Java OpenCV Lv6 〜Matクラスで背景から作成してみる〜
  9. Java OpenCV Lv7 〜MatクラスでEllipseしてみる〜
  10. Java OpenCV Lv9 〜画像編集「足し算」(cvAdd)〜
  11. Java OpenCV Lv9 〜画像編集「引き算」(cvSubtract)〜
  12. Java OpenCV Lv9 〜画像の掛け算〜
  13. Java OpenCV Lv10 〜行列演算Mat#submat()〜
  14. Java OpenCv Lv10〜画像の平均値をだす〜

投稿者:

takunoji

音響、イベント会場設営業界からIT業界へ転身。現在はJava屋としてサラリーマンをやっている。自称ガテン系プログラマー(笑) Javaプログラミングを布教したい、ラスパイとJavaの相性が良いことに気が付く。 Spring framework, Struts, Seaser, Hibernate, Playframework, JavaEE6, JavaEE7などの現場経験あり。 SQL, VBA, PL/SQL, コマンドプロント, Shellなどもやります。

コメントを残す