Opencv-storing-images
OpenCV-画像の保存
画像をキャプチャするには、カメラやスキャナーなどのデバイスを使用します。 これらのデバイスは、画像の数値を記録します(例:ピクセル値)。 OpenCVはデジタル画像を処理するライブラリです。したがって、処理のためにこれらの画像を保存する必要があります。
OpenCVライブラリの Mat クラスは、画像の値を格納するために使用されます。 n次元配列を表し、グレースケールまたはカラー画像の画像データ、ボクセルボリューム、ベクトルフィールド、点群、テンソル、ヒストグラムなどを格納するために使用されます。
このクラスは、2つのデータ部分で構成されます: header および pointer
- ヘッダー-サイズ、格納に使用されるメソッド、およびマトリックスのアドレス(サイズが一定)などの情報が含まれます。
- ポインタ-画像のピクセル値を保存します(変化し続ける)。
マットクラス
OpenCV Javaライブラリは、パッケージ org.opencv.core 内で同じ名前( Mat )でこのクラスを提供します。
コンストラクタ
OpenCV JavaライブラリのMatクラスには、Matオブジェクトを構築できるさまざまなコンストラクターがあります。
S.No | Constructors and Description |
---|---|
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 |
このコンストラクタは、別のマトリックスのオブジェクトと、新しいマトリックスを作成するために取得する行の範囲を表すクラスRangeのオブジェクトを受け入れます。 |
8 |
Mat(Mat m, Range rowRange, Range colRange) 前のパラメーターを含めて、このコンストラクターはクラスのオブジェクトを追加で受け入れます。 列の範囲を表す範囲。 |
9 |
Mat(Mat m, Rect roi) このコンストラクタは、2つのオブジェクトを受け入れます。1つは別のマトリックスを表し、もう1つは* R egion O f I * nestestを表します。 |
注-
- 配列タイプ。 CV_8UC1、…、CV_64FC4を使用して1〜4チャンネルのマトリックスを作成するか、CV_8UC(n)、…、CV_64FC(n)を使用してマルチチャンネル(最大CV_CN_MAXチャンネル)のマトリックスを作成します。
- マトリックスのタイプは、パッケージ org.opencv.core に属するクラス CvType のさまざまなフィールドによって表されていました。
メソッドと説明
以下は、Matクラスによって提供されるメソッドの一部です。
S.No | Methods and Description |
---|---|
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コードを作成する場合、最初に行う必要があるステップは、* loadLibrary()*を使用してOpenCVのネイティブライブラリをロードすることです。 以下に示すように、OpenCVネイティブライブラリをロードします。
//Loading the core library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
ステップ2:Matクラスをインスタンス化する
この章で前述した関数のいずれかを使用して、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));
例
次のプログラムコードを使用して、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]
JavaSE APIを使用した画像の読み込み
*java.awt.image.BufferedImage* パッケージの *BufferedImage* クラスは画像の保存に使用され、パッケージの *ImageIO* クラスは *import javax.imageio* が画像を読み書きするメソッドを提供します。
例
次のプログラムコードを使用して、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
あなたが指定されたパスを開いた場合、次のように保存された画像を観察することができます-