OpenCV-画像の保存
画像をキャプチャするには、カメラやスキャナーなどのデバイスを使用します。これらのデバイスは、画像の数値(例:ピクセル値)を記録します。OpenCVはデジタル画像を処理するライブラリであるため、処理のためにこれらの画像を保存する必要があります。
ザ・ MatOpenCVライブラリのクラスは、画像の値を格納するために使用されます。これはn次元配列を表し、グレースケールまたはカラー画像、ボクセルボリューム、ベクトル場、点群、テンソル、ヒストグラムなどの画像データを格納するために使用されます。
このクラスは、次の2つのデータ部分で構成されています。 header と pointer
Header −サイズ、格納に使用される方法、マトリックスのアドレス(サイズが一定)などの情報が含まれます。
Pointer −画像のピクセル値を保存します(変化し続けます)。
マットクラス
OpenCV Javaライブラリは、このクラスに同じ名前を提供します(Mat)パッケージ内 org.opencv.core。
コンストラクター
OpenCV JavaライブラリのMatクラスにはさまざまなコンストラクタがあり、これを使用してMatオブジェクトを構築できます。
S.No | コンストラクターと説明 |
---|---|
1 | Mat() これは、ほとんどの場合、パラメーターのないデフォルトのコンストラクターです。これをコンストラクターに使用して空行列を作成し、これを他のOpenCVメソッドに渡します。 |
2 | Mat(int rows, int cols, int type) このコンストラクターは、2D配列の行と列の数と配列のタイプ(データの格納に使用される)を表す整数タイプの3つのパラメーターを受け入れます。 |
3 | Mat(int rows, int cols, int type, Scalar s) 前のもののパラメーターを含めて、このコンストラクターはさらにクラスScalarのオブジェクトをパラメーターとして受け入れます。 |
4 | Mat(Size size, int type) このコンストラクターは、マトリックスのサイズを表すオブジェクトと、データの格納に使用される配列のタイプを表す整数の2つのパラメーターを受け入れます。 |
5 | Mat(Size size, int type, Scalar s) 前のもののパラメーターを含めて、このコンストラクターはさらにクラスScalarのオブジェクトをパラメーターとして受け入れます。 |
6 | Mat(long addr) |
7 | Mat(Mat m, Range rowRange) このコンストラクターは、別のマトリックスのオブジェクトと、新しいマトリックスを作成するために使用される行の範囲を表すRangeクラスのオブジェクトを受け入れます。 |
8 | Mat(Mat m, Range rowRange, Range colRange) 前のもののパラメーターを含めて、このコンストラクターはさらにクラスのオブジェクトを受け入れます。列範囲を表す範囲。 |
9 | Mat(Mat m, Rect roi) このコンストラクターは2つのオブジェクトを受け入れます。1つは別の行列を表し、もう1つは Rエギオ Of Interest。 |
Note −
配列タイプ。CV_8UC1、...、CV_64FC4を使用して1〜4チャネルのマトリックスを作成するか、CV_8UC(n)、...、CV_64FC(n)を使用してマルチチャネル(最大CV_CN_MAXチャネル)のマトリックスを作成します。
行列のタイプは、クラスのさまざまなフィールドによって表されました CvType パッケージに属する org.opencv.core。
メソッドと説明
以下は、Matクラスによって提供されるメソッドの一部です。
S.No | メソッドと説明 |
---|---|
1 | Mat col(int x) このメソッドは、列のインデックスを表す整数パラメーターを受け入れ、その列を取得して返します。 |
2 | Mat row(int y) このメソッドは、行のインデックスを表す整数パラメーターを受け入れ、その行を取得して返します。 |
3 | int cols() このメソッドは、行列の列数を返します。 |
4 | int rows() このメソッドは、行列の行数を返します。 |
5 | Mat setTo(Mat value) このメソッドは、のオブジェクトを受け入れます Mat 配列要素を入力して、指定された値に設定します。 |
6 | Mat setTo(Scalar s) このメソッドは、のオブジェクトを受け入れます Scalar 配列要素を入力して、指定された値に設定します。 |
マトリックスの作成と表示
このセクションでは、最初のOpenCVの例について説明します。簡単なOpenCVマトリックスを作成して表示する方法を見ていきます。
以下に、OpenCVでマトリックスを作成して表示するために従うべき手順を示します。
ステップ1:OpenCVネイティブライブラリをロードする
OpenCVライブラリを使用してJavaコードを記述しているときに行う必要がある最初のステップは、OpenCVのネイティブライブラリをロードすることです。 loadLibrary()。以下に示すように、OpenCVネイティブライブラリをロードします。
//Loading the core library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
ステップ2:マットクラスをインスタンス化する
この章で前述した関数のいずれかを使用して、Matクラスをインスタンス化します。
//Creating a matrix
Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));
ステップ3:メソッドを使用してマトリックスを埋める
メソッドにインデックス値を渡すことにより、行列の特定の行/列を取得できます row()/col()。
また、のバリアントのいずれかを使用して、これらに値を設定できます。 setTo() メソッド。
//Retrieving the row with index 0
Mat row0 = matrix.row(0);
//setting values of all elements in the row with index 0
row0.setTo(new Scalar(1));
//Retrieving the row with index 3
Mat col3 = matrix.col(3);
//setting values of all elements in the row with index 3
col3.setTo(new Scalar(3));
Example
次のプログラムコードを使用して、OpenCVライブラリを使用してJavaで単純なマトリックスを作成および表示できます。
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.core.Scalar;
class DisplayingMatrix {
public static void main(String[] args) {
//Loading the core library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
//Creating a matrix
Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));
//Retrieving the row with index 0
Mat row0 = matrix.row(0);
//setting values of all elements in the row with index 0
row0.setTo(new Scalar(1));
//Retrieving the row with index 3
Mat col3 = matrix.col(3);
//setting values of all elements in the row with index 3
col3.setTo(new Scalar(3));
//Printing the matrix
System.out.println("OpenCV Mat data:\n" + matrix.dump());
}
}
上記のプログラムを実行すると、次の出力が得られます-
OpenCV Mat data:
[ 1, 1, 1, 3, 1;
0, 0, 0, 3, 0;
0, 0, 0, 3, 0;
0, 0, 0, 3, 0;
0, 0, 0, 3, 0]
JavaSEAPIを使用した画像の読み込み
ザ・ BufferedImage のクラス java.awt.image.BufferedImage パッケージは画像を保存するために使用され、 ImageIO パッケージのクラス import javax.imageio 画像を読み書きするためのメソッドを提供します。
Example
次のプログラムコードを使用して、JavaSEライブラリを使用してイメージをロードおよび保存できます。
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class LoadingImage_JSE_library {
public static void main( String[] args ) throws IOException {
//Input File
File input = new File("C:/EXAMPLES/OpenCV/sample.jpg");
//Reading the image
BufferedImage image = ImageIO.read(input);
//Saving the image with a different name
File ouptut = new File("C:/OpenCV/sample.jpg");
ImageIO.write(image, "jpg", ouptut);
System.out.println("image Saved");
}
}
上記のプログラムを実行すると、次の出力が得られます-
image Saved
指定したパスを開くと、保存した画像を次のように確認できます。