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

OpenCV Javaで画像を拡大・縮小する方法|resize()メソッドの使い方とサンプルコード

画像処理ライブラリ「OpenCV」をJavaで利用する場合、Imgprocクラスのresize()メソッドを使うことで、指定した画像を簡単に拡大・縮小することができます。
本記事では、resize()メソッドの基本的な使い方と、実際に動作するサンプルコードをわかりやすく解説します。

resize()メソッドの引数

resize()メソッドは、以下のパラメータを受け取ります。

  • 元画像(ソース)と出力画像(デスティネーション)を表す2つのMatオブジェクト
  • 出力画像のサイズを表すSizeオブジェクト
  • 水平方向の倍率を表すdouble型の変数
  • 垂直方向の倍率を表すdouble型の変数
  • 処理に使用する補間方式を表すint型の変数

なお、補間方式には縮小処理に適したINTER_AREAのほか、INTER_LINEARINTER_CUBICなどがあり、用途に応じて使い分けることができます。

サンプルコード

以下は、読み込んだ画像を半分のサイズに縮小し、結果をファイルに保存してJavaFX上に表示するサンプルプログラムです。

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javafx.application.Application;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.ImageView;
import javafx.scene.image.WritableImage;
import javafx.stage.Stage;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Size;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class ScalingAnImage extends Application {
   public void start(Stage stage) throws IOException {
      // OpenCVのコアライブラリを読み込む
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      // 画像データを読み込む
      String file ="D:\\Images\\elephant.jpg";
      Mat src = Imgcodecs.imread(file);
      // 出力用のMatオブジェクトを作成する
      Mat dst = new Mat(src.rows(), src.cols(), src.type());
      // Sizeオブジェクトを作成する(元サイズの50%)
      Size size = new Size(src.rows()*0.5, src.rows()*0.5);
      // 画像をスケーリング(縮小)する
      Imgproc.resize(src, dst, size, 0, 0, Imgproc.INTER_AREA);
      Imgcodecs.imwrite("D:\\Images\\scaling_example.jpg", dst);
      // MatをJavaFXのWritableImageに変換する
      Image img = HighGui.toBufferedImage(dst);
      WritableImage writableImage= SwingFXUtils.toFXImage((BufferedImage) img, null);
      // ImageViewを設定する
      ImageView imageView = new ImageView(writableImage);
      imageView.setX(10);
      imageView.setY(10);
      imageView.setPreserveRatio(true);
      // Sceneオブジェクトを設定する
      Group root = new Group(imageView);
      Scene scene = new Scene(root, 595, 400);
      stage.setTitle("Scaling Example");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String args[]) {
      launch(args);
   }
}

入力画像

OpenCV Javaで画像を拡大・縮小する方法|resize()メソッドの使い方とサンプルコード

出力結果

上記のプログラムを実行すると、元の画像が半分のサイズに縮小され、以下のようにウィンドウ上に表示されます。同時に、縮小後の画像が「scaling_example.jpg」として保存されます。

OpenCV Javaで画像を拡大・縮小する方法|resize()メソッドの使い方とサンプルコード

  1. OpenCVとJavaFXで画像の明るさを下げる方法:convertTo()メソッドの実装例

    Javaで画像の明るさを変更する方法の一つとして、OpenCVのconvertTo()メソッドを使う手法があります。このメソッドは、指定された行列(Mat)に対して必要な計算を実行し、画像のコントラストや明るさを調整します。convertTo()メソッドは以下の4つのパラメータを受け取ります。mat − 結果を格納するための空の行列。元の行列と同じサイズ・型である必要があります。rtype − 出力行列の型を指定する整数値。負の値を指定した場合、出力行列の型は元の行列と同じになります。alpha − ゲイン値。0より大きい値である必要があります(デフォルト値は1)。beta − バイアス値(デ

  2. JavaとOpenCVライブラリを使って画像内の顔を検出する方法

    JavaでOpenCVを使用して画像から顔を検出するには、CascadeClassifierクラスを利用します。このクラスは、分類器ファイル(カスケードファイル)を読み込み、画像内から目的のオブジェクト(ここでは顔)を検出する役割を担います。 CascadeClassifierクラスとは CascadeClassifierは、OpenCVが提供する物体検出用のクラスです。事前に学習済みのカスケード分類器(XMLファイル)を読み込むことで、顔や人など特定のパターンを画像から認識できます。 detectMultiScale()メソッドについて このクラスが持つdetectMultiScale(