イントロダクション
前回やった、Ellipseメソッドは今後触れることにします。下の本を読むとまだ出てこないみたいです。そんなわけで!やっとこの本に戻ってきました。
戦闘準備よーし! pic.twitter.com/D8dmctGMO1
— たくのじ (@java_takunoji) November 15, 2018
ROIについて
画像処理をするときに焦点を絞って処理する機能のようです。
兎にも角にも動かさないと始まらないので。。。
参考にしたコード(ページ) (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) + "ミリ秒"); }
関連ページ一覧
- Java OpenCV 環境セットアップ(on Mac)
- Java OpenCv Lv1 〜入門: 写真の表示〜
- Java OpenCV Lv2 〜画像を表示する〜
- Java OpenCV Lv3 〜画像の平滑化(smooth())〜
- Java OpenCV Lv3 〜画像にガウシアンフィルタ(GaussianBlur())〜
- Java OpenCV Lv4 〜画像の中身をみてみる〜
- Java OpenCV Lv5 〜Matクラスで描画処理〜
- Java OpenCV Lv6 〜Matクラスで背景から作成してみる〜
- Java OpenCV Lv7 〜MatクラスでEllipseしてみる〜
- Java OpenCV Lv9 〜画像編集「足し算」(cvAdd)〜
- Java OpenCV Lv9 〜画像編集「引き算」(cvSubtract)〜
- Java OpenCV Lv9 〜画像の掛け算〜
- Java OpenCV Lv10 〜行列演算Mat#submat()〜
- Java OpenCv Lv10〜画像の平均値をだす〜