Opencvのマットオブジェクト-画像データ構造

序文

Matオブジェクトは、ロードされた、またはオールインされたメモリオブジェクトですが、正確には何ですか?

1.ターゲットは何ですか?

オブジェクトは、プロパティとメソッドを持つことができるコレクションです

2.マットオブジェクトは画像をどのように見ますか?

普通の人の目には彼は絵であり
、私の目には彼は私の偶像
であり、コンピューターでは彼は二次元配列として解析されます。

ここに画像の説明を挿入

2. Matオブジェクトのソース?

マットライブラリが登場したとはどういう意味ですか?opencv1.jiのバージョンでは、画像の処理はIplImageライブラリ(C言語のスタイル)を使用して実装されていましたが、すぐにメモリリークの問題が発生しました。
これに基づいて、opencv2.jiのバージョンがオブジェクト指向に導入されました-指向プログラミングのMatオブジェクトは、C ++スタイルのデータ構造です。

3つ目は、Matオブジェクトのコンストラクターです。

1)コンストラクタとデストラクタを簡単に紹介します。

      3.1.1。コンストラクターの定義:コンストラクターは特別なメソッドです。これは主に、オブジェクトの作成時にオブジェクトを初期化するため、つまり、オブジェクトメンバー変数に初期値を割り当てるために使用されます。オブジェクト作成ステートメントのnew演算子で常に使用されます。クラスには複数のコンストラクターを含めることができ、パラメーターの数またはパラメーターのタイプに基づいて区別できます。

      3.1.2。デストラクタの定義:デストラクタはコンストラクタの反対です。オブジェクトの関数が呼び出された場合など、オブジェクトがそのライフサイクルを終了すると、システムは自動的にデストラクタを実行します。デストラクタは、「余波をクリーンアップする」ためによく使用されます(たとえば、オブジェクトの作成時にnewを使用してメモリ空間を開き、deleteを使用するとデストラクタが自動的に呼び出されてメモリが解放されます)。

2)Matオブジェクトのコンストラクター:3.2.1。Matオブジェクトのパラメーターなしのコンストラクター:
      

Mat::Mat();
//生成一个矩阵并由OpenCV提供的函数(一般是Mat::create() 和 cv::imread() )来分配储存空间。
//Mat类可以分为两个部分:矩阵头和指向像素数据的矩阵指针

      構築方法の定義に      移り      ます。中国語でのコメントの意味
ここに画像の説明を挿入次のとおりです。
@ param rows2次元配列の行数。
      @param colsは、2次元配列の列数を表します。
      @paramtype配列型。CV_8UC1、...、CV_64FC4を使用して1〜4チャネルのマ​​トリックスを作成する
      か、CV_8UC(n)、...、CV_64FC(n)を使用して複数のチャネル(最大CV_CN_MAXチャネル)を持つマトリックスを作成します。

      。3.2.2ザマットオブジェクトは、行(行)、カラム(COLS)、及びタイプ(型)のコンストラクタを使用しています。

Mat::Mat(int rows, int cols, int type);

      3.2.3。Matオブジェクトは、サイズとタイプのコンストラクターを使用します

Mat::Mat(Size size, int type);

      3.2.4ザ。マットオブジェクトは、行(行)、カラム(COLS)、タイプ(型)、およびスカラースカラーコンストラクタを使用しています。

Mat::Mat(int rows, int cols, int type, const Scalar& s);

      3.2.5。Matオブジェクトは、サイズ、タイプ、およびスカラースカラーコンストラクターを使用します。

Mat::Mat(Size size, int type, const Scalar& s);

      3.2.6。Matオブジェクトは、sizeを使用して、n次元配列形状の整数配列と型コンストラクターを指定します。

Mat::Mat(int ndims, const int* sizes, int type);
//ndims数组维数

      3.2.7。Matオブジェクトは、サイズで指定された動的整数配列と型コンストラクターを使用します。

Mat::Mat(const std::vector<int>& sizes, int type);
//vector,传入动态整数数组,在使用前,需导入#include <vector>

      3.2.8。Matオブジェクトは、サイズを使用して、n次元配列形状の整数配列、型、およびスカラーベクトルコンストラクターを指定します。

Mat::Mat(int ndims, const int* sizes, int type, const Scalar& s);

      3.2.9。Matオブジェクトは、画像データをコピーせずに、新しく作成されたオブジェクトにmを割り当て、浅いコピーコンストラクターに属する画像データを共有します。

Mat::Mat(const Mat& m);

      3.2.10。Matオブジェクトは、行、列、型、データポインター、および行列行が占めるバイト数のコンストラクターを使用します。

Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP);

/*@param size 2D array size:大小(列、行)。在Size()构造函数中,行数和列数按相反顺序排列。
@param type数组类型。使用CV_8UC1,…,CV_64FC4创建1-4个通道矩阵,或CV_8UC(n),…,CV_64FC(n)创建多通道(最多CV_CN_MAX通道)矩阵。
@param data指向用户数据的指针。接受数据和步长参数的矩阵构造函数不分配矩阵数据。相反,它们只是初始化指向指定数据,这意味着没有数据被复制。此操作非常有效,可用于使用OpenCV函数处理外部数据。外部数据不会自动释放,因此你应该照顾好它。
@param step每个矩阵行占用的字节数。该值应包括以下位置的填充字节:每行的末尾(如果有)。如果缺少参数(设置为AUTO\u STEP),则假定没有填充实际步长计算为cols*elemSize()。请参阅Mat::elemSize。
此构造函数不创建图像数据所需内存,而是直接使用data指针,图像的行步长由 step指定。
*/

      3.2.11。Matオブジェクトは、サイズ、タイプ、データポインター、および行列行が占めるバイト数のコンストラクターを使用します。

Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP);

      3.2.12。Matオブジェクトは、roiで指定された範囲のコンストラクターであるmの一部を新たに作成します。

Mat::Mat(const Mat& m, const Rect& roi);

3)これらは、マトリックスを構成するさまざまなコンストラクターです。自動ポジショニングで説明されているように、通常はデフォルトのコンストラクターで十分であり、適切なマトリックスがOpenCV関数によって割り当てられます。構築された行列は、別の行列または行列式にさらに割り当てるか、Mat :: createを使用して割り当てることができます。前者の場合、古いコンテンツは逆参照されます。

4)最も一般的に使用されるマットの構築方法は次のとおりです。

Mat::Mat();
Mat::Mat(int rows,int cols,int type);
Mat::Mat(Size size,int type ) ;
Mat::Mat(int ndims,const int *  sizes,int type,const Scalar& s) ;
Mat::Mat(const Mat & m);
//如有需要可自行学习其他构造函数

4、Matオブジェクトコンストラクターの例:

コードブロック:

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main() {
    
    
	
	Mat src = imread("C:\\Users\\ASUS\\Desktop\\3.png");
	namedWindow("input_Image_Windows", WINDOW_AUTOSIZE);
	imshow("input_Image_Windows", src);

	//Mat dst = Mat();//无参数构造函数使用
	Mat dst = src;
	namedWindow("output_Image_Windows", WINDOW_AUTOSIZE);
	imshow("output_Image_Windows", dst);
	
	waitKey(0);
	return 0;
}

演算結果:
ここに画像の説明を挿入

5、Matオブジェクトのメンバー関数:

1.マトリックスを別のマトリックスにコピーするclone関数;
2。前のマトリックスと同様のcopyTo関数;
3。新しいマトリックスを作成するCreate関数;
4。convertTo関数は次の関数を提供します行列の変換;
5。画像の深さを返すdepth関数;
6。画像チャネルの数を返すchannels関数;
7。行列の型を返すtype関数;
8。aを返すzeros関数0の行列;
他の関数はそれ自体で検索でき、使用方法は1つずつ紹介されていません。

総括する

画像処理のデータ構造として、マットオブジェクトはコンテンツが豊富で学習が必要です。使用後は学習に時間を費やします。学習に時間を費やす必要はありませんが、基本は理解して使用することです。 。

エラーがあれば訂正してください!

おすすめ

転載: blog.csdn.net/ivan_9/article/details/113087688