![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
n次元の密な配列クラス 続き...
#include <opencv2/core/mat.hpp>
公開型 | |
| enum | { MAGIC_VAL = 0x42FF0000 , AUTO_STEP = 0 , CONTINUOUS_FLAG = CV_MAT_CONT_FLAG , SUBMATRIX_FLAG = CV_SUBMAT_FLAG } |
| enum | { MAGIC_MASK = 0xFFFF0000 , TYPE_MASK = 0x00000FFF , DEPTH_MASK = 7 } |
公開メンバ関数 | |
| Mat () CV_NOEXCEPT | |
| Mat (const cuda::GpuMat &m) | |
| GpuMat からデータをダウンロードする | |
| Mat (const Mat &m) | |
| Mat (const Mat &m, const Range &rowRange, const Range &colRange=Range::all()) | |
| Mat (const Mat &m, const Range *ranges) | |
| Mat (const Mat &m, const Rect &roi) | |
| Mat (const Mat &m, const std::vector< Range > &ranges) | |
| template<typename _Tp > | |
| Mat (const MatCommaInitializer_< _Tp > &commaInitializer) | |
| template<typename _Tp , int m, int n> | |
| Mat (const Matx< _Tp, m, n > &mtx, bool copyData=true) | |
| template<typename _Tp > | |
| Mat (const Point3_< _Tp > &pt, bool copyData=true) | |
| template<typename _Tp > | |
| Mat (const Point_< _Tp > &pt, bool copyData=true) | |
| template<typename _Tp , size_t _Nm> | |
| Mat (const std::array< _Tp, _Nm > &arr, bool copyData=false) | |
| template<typename _Tp , typename = typename std::enable_if<std::is_arithmetic<_Tp>::value>::type> | |
| Mat (const std::initializer_list< _Tp > list) | |
| template<typename _Tp > | |
| Mat (const std::initializer_list< int > sizes, const std::initializer_list< _Tp > list) | |
| template<typename _Tp > | |
| Mat (const std::vector< _Tp > &vec, bool copyData=false) | |
| Mat (const std::vector< int > &sizes, int type) | |
| Mat (const std::vector< int > &sizes, int type, const Scalar &s) | |
| Mat (const std::vector< int > &sizes, int type, void *data, const size_t *steps=0) | |
| template<typename _Tp , int n> | |
| Mat (const Vec< _Tp, n > &vec, bool copyData=true) | |
| Mat (int ndims, const int *sizes, int type) | |
| Mat (int ndims, const int *sizes, int type, const Scalar &s) | |
| Mat (int ndims, const int *sizes, int type, void *data, const size_t *steps=0) | |
| Mat (int rows, int cols, int type) | |
| Mat (int rows, int cols, int type, const Scalar &s) | |
| Mat (int rows, int cols, int type, void *data, size_t step=AUTO_STEP) | |
| Mat (Mat &&m) CV_NOEXCEPT | |
| Mat (Size size, int type) | |
| Mat (Size size, int type, const Scalar &s) | |
| Mat (Size size, int type, void *data, size_t step=AUTO_STEP) | |
| ~Mat () | |
| デストラクタ。release() を呼び出す | |
| void | addref () |
| 参照カウンタをインクリメントする。 | |
| Mat & | adjustROI (int dtop, int dbottom, int dleft, int dright) |
| 親行列内における部分行列のサイズと位置を調整する。 | |
| void | assignTo (Mat &m, int type=-1) const |
| convertTo の関数形式を提供する。 | |
| template<typename _Tp > | |
| _Tp & | at (const int *idx) |
| template<typename _Tp > | |
| const _Tp & | at (const int *idx) const |
| template<typename _Tp , int n> | |
| _Tp & | at (const Vec< int, n > &idx) |
| template<typename _Tp , int n> | |
| const _Tp & | at (const Vec< int, n > &idx) const |
| template<typename _Tp > | |
| _Tp & | at (int i0, int i1, int i2) |
| template<typename _Tp > | |
| const _Tp & | at (int i0, int i1, int i2) const |
| template<typename _Tp > | |
| _Tp & | at (int i0=0) |
| 指定した配列要素への参照を返す。 | |
| template<typename _Tp > | |
| const _Tp & | at (int i0=0) const |
| template<typename _Tp > | |
| _Tp & | at (int row, int col) |
| template<typename _Tp > | |
| const _Tp & | at (int row, int col) const |
| template<typename _Tp > | |
| _Tp & | at (Point pt) |
| template<typename _Tp > | |
| const _Tp & | at (Point pt) const |
| template<typename _Tp > | |
| MatIterator_< _Tp > | begin () |
| 行列イテレータを返し、最初の行列要素に設定する。 | |
| template<typename _Tp > | |
| MatConstIterator_< _Tp > | begin () const |
| int | channels () const |
| 行列のチャンネル数を返す。 | |
| int | checkVector (int elemChannels, int depth=-1, bool requireContinuous=true) const |
| CV_NODISCARD_STD Mat | clone () const |
| 配列とその基となるデータの完全なコピーを生成する。 | |
| Mat | col (int x) const |
| 指定した行列の列に対する行列ヘッダを生成する。 | |
| Mat | colRange (const Range &r) const |
| Mat | colRange (int startcol, int endcol) const |
| 指定した列範囲に対する行列ヘッダを生成する。 | |
| void | convertTo (OutputArray m, int rtype, double alpha=1, double beta=0) const |
| 省略可能なスケーリングを伴って、配列を別のデータ型に変換する。 | |
| void | copyAt (OutputArray m) const |
| 既存の行列を上書きする。 | |
| void | copyAt (OutputArray m, InputArray mask) const |
| void | copySize (const Mat &m) |
| 内部用途の関数。_size, _step 配列を適切に再割り当てする | |
| void | copyTo (OutputArray m) const |
| 行列を別の行列にコピーする。 | |
| void | copyTo (OutputArray m, InputArray mask) const |
| void | create (const std::vector< int > &sizes, int type) |
| void | create (int ndims, const int *sizes, int type) |
| void | create (int rows, int cols, int type) |
| 必要に応じて新しい配列データを割り当てる。 | |
| void | create (Size size, int type) |
| Mat | cross (InputArray m) const |
| 2つの3要素ベクトルの外積を計算する。 | |
| void | deallocate () |
| 内部用途の関数。代わりに 'release' メソッドの使用を検討すること。行列データを解放する | |
| int | depth () const |
| 行列要素のビット深度を返す。 | |
| Mat | diag (int d=0) const |
| 行列から対角成分を抽出する。 | |
| double | dot (InputArray m) const |
| 2つのベクトルの内積を計算する。 | |
| size_t | elemSize () const |
| 行列要素のサイズをバイト単位で返す。 | |
| size_t | elemSize1 () const |
| 各行列要素チャンネルのサイズをバイト単位で返す。 | |
| bool | empty () const |
| 配列に要素がない場合に true を返す。 | |
| template<typename _Tp > | |
| MatIterator_< _Tp > | end () |
| 行列イテレータを返し、最後の行列要素の次の位置に設定する。 | |
| template<typename _Tp > | |
| MatConstIterator_< _Tp > | end () const |
| template<typename _Tp , typename Functor > | |
| void | forEach (const Functor &operation) |
| 与えられた関数オブジェクトをすべての行列要素に対して並列に実行する。 | |
| template<typename _Tp , typename Functor > | |
| void | forEach (const Functor &operation) const |
| UMat | getUMat (AccessFlag accessFlags, UMatUsageFlags usageFlags=USAGE_DEFAULT) const |
| Mat から UMat を取得する | |
| MatExpr | inv (int method=DECOMP_LU) const |
| 行列の逆行列を求める。 | |
| bool | isContinuous () const |
| 行列がメモリ上で連続しているかどうかを返す。 | |
| bool | isSubmatrix () const |
| この行列が別の行列の部分行列である場合に true を返す | |
| void | locateROI (Size &wholeSize, Point &ofs) const |
| 親行列内における行列ヘッダの位置を特定する。 | |
| MatExpr | mul (InputArray m, double scale=1) const |
| 2つの行列の要素ごとの乗算または除算を実行する。 | |
| template<typename _Tp , int m, int n> | |
| operator Matx< _Tp, m, n > () const | |
| template<typename _Tp , std::size_t _Nm> | |
| operator std::array< _Tp, _Nm > () const | |
| template<typename _Tp > | |
| operator std::vector< _Tp > () const | |
| template<typename _Tp , int n> | |
| operator Vec< _Tp, n > () const | |
| Mat | operator() (const Range *ranges) const |
| Mat | operator() (const Rect &roi) const |
| Mat | operator() (const std::vector< Range > &ranges) const |
| Mat | operator() (Range rowRange, Range colRange) const |
| 矩形の部分行列を抽出する。 | |
| Mat & | operator= (const Mat &m) |
| 代入演算子 | |
| Mat & | operator= (const MatExpr &expr) |
| Mat & | operator= (const Scalar &s) |
| 配列の全要素または一部の要素を指定した値に設定する。 | |
| Mat & | operator= (Mat &&m) |
| void | pop_back (size_t nelems=1) |
| 行列の末尾から要素を削除する。 | |
| uchar * | ptr (const int *idx) |
| template<typename _Tp > | |
| _Tp * | ptr (const int *idx) |
| const uchar * | ptr (const int *idx) const |
| template<typename _Tp > | |
| const _Tp * | ptr (const int *idx) const |
| template<int n> | |
| uchar * | ptr (const Vec< int, n > &idx) |
| template<typename _Tp , int n> | |
| _Tp * | ptr (const Vec< int, n > &idx) |
| template<int n> | |
| const uchar * | ptr (const Vec< int, n > &idx) const |
| template<typename _Tp , int n> | |
| const _Tp * | ptr (const Vec< int, n > &idx) const |
| uchar * | ptr (int i0, int i1, int i2) |
| template<typename _Tp > | |
| _Tp * | ptr (int i0, int i1, int i2) |
| const uchar * | ptr (int i0, int i1, int i2) const |
| template<typename _Tp > | |
| const _Tp * | ptr (int i0, int i1, int i2) const |
| uchar * | ptr (int i0=0) |
| 指定した行列の行へのポインタを返す。 | |
| template<typename _Tp > | |
| _Tp * | ptr (int i0=0) |
| const uchar * | ptr (int i0=0) const |
| template<typename _Tp > | |
| const _Tp * | ptr (int i0=0) const |
| uchar * | ptr (int row, int col) |
| template<typename _Tp > | |
| _Tp * | ptr (int row, int col) |
| const uchar * | ptr (int row, int col) const |
| template<typename _Tp > | |
| const _Tp * | ptr (int row, int col) const |
| template<typename _Tp > | |
| void | push_back (const _Tp &elem) |
| 行列の末尾に要素を追加する。 | |
| void | push_back (const Mat &m) |
| template<typename _Tp > | |
| void | push_back (const Mat_< _Tp > &elem) |
| template<typename _Tp > | |
| void | push_back (const std::vector< _Tp > &elem) |
| void | push_back_ (const void *elem) |
| 内部関数 | |
| template<typename _Tp > | |
| std::reverse_iterator< MatIterator_< _Tp > > | rbegin () |
| begin() と同じだが、逆方向の走査用。 | |
| template<typename _Tp > | |
| std::reverse_iterator< MatConstIterator_< _Tp > > | rbegin () const |
| Mat | reinterpret (int type) const |
| 行列の型をリセットする。 | |
| void | release () |
| 参照カウンタをデクリメントし、必要に応じて行列を解放する。 | |
| template<typename _Tp > | |
| std::reverse_iterator< MatIterator_< _Tp > > | rend () |
| end() と同じだが、逆方向の走査用。 | |
| template<typename _Tp > | |
| std::reverse_iterator< MatConstIterator_< _Tp > > | rend () const |
| void | reserve (size_t sz) |
| 指定した行数分の領域を確保する。 | |
| void | reserveBuffer (size_t sz) |
| 指定したバイト数分の領域を確保する。 | |
| Mat | reshape (int cn, const std::vector< int > &newshape) const |
| Mat | reshape (int cn, int newndims, const int *newsz) const |
| Mat | reshape (int cn, int rows=0) const |
| データをコピーせずに、2次元行列の形状やチャンネル数を変更する。 | |
| void | resize (size_t sz) |
| 行列の行数を変更する。 | |
| void | resize (size_t sz, const Scalar &s) |
| Mat | row (int y) const |
| 指定した行に対する行列ヘッダを作成する。 | |
| Mat | rowRange (const Range &r) const |
| Mat | rowRange (int startrow, int endrow) const |
| 指定した行範囲に対する行列ヘッダを作成する。 | |
| Mat & | setTo (InputArray value, InputArray mask=noArray()) |
| 配列の全要素または一部の要素を指定した値に設定する。 | |
| size_t | step1 (int i=0) const |
| 正規化されたステップを返す。 | |
| MatExpr | t () const |
| 行列を転置する。 | |
| size_t | total () const |
| 配列の全要素数を返す。 | |
| size_t | total (int startDim, int endDim=INT_MAX) const |
| 配列の全要素数を返す。 | |
| int | type () const |
| 行列要素の型を返す。 | |
| void | updateContinuityFlag () |
| 内部使用メソッド: 連続性フラグを更新する | |
静的公開メンバ関数 | |
| static CV_NODISCARD_STD Mat | diag (const Mat &d) |
| 対角行列を作成する | |
| static CV_NODISCARD_STD MatExpr | eye (int rows, int cols, int type) |
| 指定したサイズと型の単位行列を返す。 | |
| static CV_NODISCARD_STD MatExpr | eye (Size size, int type) |
| static MatAllocator * | getDefaultAllocator () |
| static MatAllocator * | getStdAllocator () |
| および標準アロケータ | |
| static CV_NODISCARD_STD MatExpr | ones (int ndims, const int *sz, int type) |
| static CV_NODISCARD_STD MatExpr | ones (int rows, int cols, int type) |
| 指定したサイズと型で、すべての要素が1の配列を返す。 | |
| static CV_NODISCARD_STD MatExpr | ones (Size size, int type) |
| static void | setDefaultAllocator (MatAllocator *allocator) |
| static CV_NODISCARD_STD MatExpr | zeros (int ndims, const int *sz, int type) |
| static CV_NODISCARD_STD MatExpr | zeros (int rows, int cols, int type) |
| 指定したサイズと型のゼロ配列を返す。 | |
| static CV_NODISCARD_STD MatExpr | zeros (Size size, int type) |
公開変数類 | |
| MatAllocator * | allocator |
| カスタムアロケータ | |
| int | cols |
| uchar * | data |
| データへのポインタ | |
| const uchar * | dataend |
| const uchar * | datalimit |
| const uchar * | datastart |
| locateROI と adjustROI で使用される補助フィールド | |
| int | dims |
| 行列の次元数。>= 2 | |
| int | flags |
| int | rows |
| 行数と列数。行列が3次元以上の場合は (-1, -1) | |
| MatSize | size |
| MatStep | step |
| UMatData * | u |
| UMat との連携 | |
限定公開メンバ関数 | |
| template<typename _Tp , typename Functor > | |
| void | forEach_impl (const Functor &operation) |
Mat クラスは、n次元の密な数値シングルチャンネルまたはマルチチャンネル配列を表す。実数値または複素数値のベクトルや行列、グレースケールやカラーの画像、ボクセルボリューム、ベクトル場、点群、テンソル、ヒストグラム(ただし、非常に高次元のヒストグラムは SparseMat に格納したほうがよい場合もある)の格納に使用できる。配列 M のデータレイアウトは配列 M.step[] によって定義されており、要素 \((i_0,...,i_{M.dims-1})\)(ただし \(0\leq i_k<M.size[k]\))のアドレスは次のように計算される:
\[addr(M_{i_0,...,i_{M.dims-1}}) = M.data + M.step[0]*i_0 + M.step[1]*i_1 + ... + M.step[M.dims-1]*i_{M.dims-1}\]
2次元配列の場合、上式は次のように簡略化される:
\[addr(M_{i,j}) = M.data + M.step[0]*i + M.step[1]*j\]
M.step[i] >= M.step[i+1] である点に注意する(実際には M.step[i] >= M.step[i+1]*M.size[i+1] )。これは、2次元行列が行ごとに格納され、3次元行列が面ごとに格納される、というように格納されることを意味する。M.step[M.dims-1] は最小であり、常に要素サイズ M.elemSize() に等しい。
したがって、Mat のデータレイアウトは、Numpy (ndarray)、Win32 (デバイス非依存ビットマップ) など、標準的なツールキットやSDKに含まれる大半の密配列型と互換性がある。すなわち、ピクセルの位置を計算するために ステップ(または ストライド)を用いる任意の配列と互換性がある。この互換性のおかげで、ユーザが確保したデータに対する Mat ヘッダを作成し、OpenCVの関数を使ってその場で処理することが可能である。
Mat オブジェクトを作成する方法はさまざまある。代表的な方法を以下に挙げる:
clone() メソッドを使う。<< operator の後にカンマ区切りの値を並べるだけである。これらの値は定数、変数、式などでありうる。また、コンパイルエラーを避けるために余分な括弧が必要である点に注意する。配列が作成されると、参照カウント方式によって自動的に管理される。配列ヘッダがユーザの確保したデータの上に構築されている場合は、そのデータの扱いを自分で行う必要がある。配列データは、それを指すものがなくなった時点で解放される。配列のデストラクタが呼ばれる前に、配列ヘッダが指すデータを解放したい場合は、Mat::release() を使う。
配列クラスについて次に学ぶべき重要な点は要素アクセスである。各配列要素のアドレスを計算する方法については、本マニュアルですでに説明した。通常、この式をコード中で直接使う必要はない。配列の要素型がわかっていれば(メソッド Mat::type() で取得できる)、2次元配列の要素 \(M_{ij}\) には次のようにアクセスできる:
ここでは M が倍精度浮動小数点配列であると仮定している。at メソッドには、次元数に応じたいくつかのバリエーションがある。
2次元配列の1行全体を処理する必要がある場合、最も効率的な方法は、まずその行へのポインタを取得し、続いて単純なC言語の演算子 [] を使うことである:
上記のような一部の操作は、実際には配列の形状に依存しない。それらは配列の要素を1つずつ処理するだけである(または、配列の加算のように、同じ座標を持つ複数の配列の要素を処理する)。このような操作は 要素ごと (element-wise) と呼ばれる。すべての入出力配列が連続しているかどうか、すなわち各行の末尾に隙間がないかどうかを確認するのは理にかなっている。もし連続していれば、それらを1本の長い行として処理する:
連続した行列の場合、外側ループの本体は一度だけ実行される。そのためオーバーヘッドが小さくなり、特に小さい行列の場合に顕著である。
最後に、連続する行の間の隙間を賢くスキップできるSTLスタイルのイテレータがある:
行列のイテレータはランダムアクセスイテレータなので、std::sort() を含む任意のSTLアルゴリズムに渡すことができる。
| cv::Mat::Mat | ( | ) |
これらは行列を生成するさまざまなコンストラクタである。AutomaticAllocation で述べたように、多くの場合デフォルトコンストラクタで十分であり、適切な行列はOpenCVの関数によって割り当てられる。生成された行列は、さらに別の行列や行列式に代入したり、Mat::create で割り当てたりできる。前者の場合、古い内容は参照解除される。
| cv::Mat::Mat | ( | int | rows, |
| int | cols, | ||
| int | type ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| rows | 2次元配列の行数。 |
| cols | 2次元配列の列数。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| cv::Mat::Mat | ( | Size | size, |
| int | type ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| size | 2次元配列のサイズ:Size(cols, rows) 。Size()コンストラクタでは、行数と列数が逆の順序で並ぶ。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| cv::Mat::Mat | ( | int | rows, |
| int | cols, | ||
| int | type, | ||
| const Scalar & | s ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| rows | 2次元配列の行数。 |
| cols | 2次元配列の列数。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| s | 各行列要素を初期化するための省略可能な値。構築後にすべての行列要素を特定の値に設定するには、代入演算子Mat::operator=(const Scalar& value) を使用する。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| size | 2次元配列のサイズ:Size(cols, rows) 。Size()コンストラクタでは、行数と列数が逆の順序で並ぶ。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| s | 各行列要素を初期化するための省略可能な値。構築後にすべての行列要素を特定の値に設定するには、代入演算子Mat::operator=(const Scalar& value) を使用する。 |
| cv::Mat::Mat | ( | int | ndims, |
| const int * | sizes, | ||
| int | type ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| ndims | 配列の次元数。 |
| sizes | n次元配列の形状を指定する整数の配列。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| cv::Mat::Mat | ( | const std::vector< int > & | sizes, |
| int | type ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| sizes | n次元配列の形状を指定する整数の配列。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| cv::Mat::Mat | ( | int | ndims, |
| const int * | sizes, | ||
| int | type, | ||
| const Scalar & | s ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| ndims | 配列の次元数。 |
| sizes | n次元配列の形状を指定する整数の配列。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| s | 各行列要素を初期化するための省略可能な値。構築後にすべての行列要素を特定の値に設定するには、代入演算子Mat::operator=(const Scalar& value) を使用する。 |
| cv::Mat::Mat | ( | const std::vector< int > & | sizes, |
| int | type, | ||
| const Scalar & | s ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| sizes | n次元配列の形状を指定する整数の配列。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| s | 各行列要素を初期化するための省略可能な値。構築後にすべての行列要素を特定の値に設定するには、代入演算子Mat::operator=(const Scalar& value) を使用する。 |
| cv::Mat::Mat | ( | const Mat & | m | ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| m | (全体または一部が)構築される行列に割り当てられる配列。これらのコンストラクタではデータはコピーされない。代わりに、mのデータまたはその部分配列を指すヘッダが構築され、それと関連付けられる。参照カウンタがあれば、それがインクリメントされる。したがって、このようなコンストラクタで作成した行列を変更すると、mの対応する要素も変更される。部分配列の独立したコピーが必要な場合は、Mat::clone() を使用する。 |
| cv::Mat::Mat | ( | int | rows, |
| int | cols, | ||
| int | type, | ||
| void * | data, | ||
| size_t | step = AUTO_STEP ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| rows | 2次元配列の行数。 |
| cols | 2次元配列の列数。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| data | ユーザーデータへのポインタ。dataおよびstep引数を取る行列コンストラクタは行列データを確保しない。代わりに、指定されたデータを指す行列ヘッダを初期化するだけであり、データはコピーされない。この操作は非常に効率的で、OpenCVの関数を使って外部データを処理するために利用できる。外部データは自動的には解放されないため、自分で管理する必要がある。 |
| step | 各行列の行が占めるバイト数。この値には、各行末のパディングバイトがあればそれも含める必要がある。この引数が省略された場合(AUTO_STEPに設定された場合)、パディングはないものとみなされ、実際のstepはcols*elemSize()として計算される。Mat::elemSizeを参照。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| size | 2次元配列のサイズ:Size(cols, rows) 。Size()コンストラクタでは、行数と列数が逆の順序で並ぶ。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| data | ユーザーデータへのポインタ。dataおよびstep引数を取る行列コンストラクタは行列データを確保しない。代わりに、指定されたデータを指す行列ヘッダを初期化するだけであり、データはコピーされない。この操作は非常に効率的で、OpenCVの関数を使って外部データを処理するために利用できる。外部データは自動的には解放されないため、自分で管理する必要がある。 |
| step | 各行列の行が占めるバイト数。この値には、各行末のパディングバイトがあればそれも含める必要がある。この引数が省略された場合(AUTO_STEPに設定された場合)、パディングはないものとみなされ、実際のstepはcols*elemSize()として計算される。Mat::elemSizeを参照。 |
| cv::Mat::Mat | ( | int | ndims, |
| const int * | sizes, | ||
| int | type, | ||
| void * | data, | ||
| const size_t * | steps = 0 ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| ndims | 配列の次元数。 |
| sizes | n次元配列の形状を指定する整数の配列。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| data | ユーザーデータへのポインタ。dataおよびstep引数を取る行列コンストラクタは行列データを確保しない。代わりに、指定されたデータを指す行列ヘッダを初期化するだけであり、データはコピーされない。この操作は非常に効率的で、OpenCVの関数を使って外部データを処理するために利用できる。外部データは自動的には解放されないため、自分で管理する必要がある。 |
| steps | 多次元配列の場合の、ndims-1個のstepの配列(最後のstepは常に要素サイズに設定される)。指定されない場合、行列は連続しているものとみなされる。 |
| cv::Mat::Mat | ( | const std::vector< int > & | sizes, |
| int | type, | ||
| void * | data, | ||
| const size_t * | steps = 0 ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| sizes | n次元配列の形状を指定する整数の配列。 |
| type | 配列の型。CV_8UC1, ..., CV_64FC4を使って1~4チャンネルの行列を作成するか、CV_8UC(n), ..., CV_64FC(n)を使ってマルチチャンネル(最大CV_CN_MAXチャンネル)の行列を作成する。 |
| data | ユーザーデータへのポインタ。dataおよびstep引数を取る行列コンストラクタは行列データを確保しない。代わりに、指定されたデータを指す行列ヘッダを初期化するだけであり、データはコピーされない。この操作は非常に効率的で、OpenCVの関数を使って外部データを処理するために利用できる。外部データは自動的には解放されないため、自分で管理する必要がある。 |
| steps | 多次元配列の場合の、ndims-1個のstepの配列(最後のstepは常に要素サイズに設定される)。指定されない場合、行列は連続しているものとみなされる。 |
| cv::Mat::Mat | ( | const Mat & | m, |
| const Range & | rowRange, | ||
| const Range & | colRange = Range::all() ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| m | (全体または一部が)構築される行列に割り当てられる配列。これらのコンストラクタではデータはコピーされない。代わりに、mのデータまたはその部分配列を指すヘッダが構築され、それと関連付けられる。参照カウンタがあれば、それがインクリメントされる。したがって、このようなコンストラクタで作成した行列を変更すると、mの対応する要素も変更される。部分配列の独立したコピーが必要な場合は、Mat::clone() を使用する。 |
| rowRange | Range。mから取り出す行の範囲。通常どおり、範囲の開始は含まれ、範囲の終端は含まれない。すべての行を取り出すにはRange::all()を使用する。 |
| colRange | Range。mから取り出す列の範囲。すべての列を取り出すにはRange::all()を使用する。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| m | (全体または一部が)構築される行列に割り当てられる配列。これらのコンストラクタではデータはコピーされない。代わりに、mのデータまたはその部分配列を指すヘッダが構築され、それと関連付けられる。参照カウンタがあれば、それがインクリメントされる。したがって、このようなコンストラクタで作成した行列を変更すると、mの対応する要素も変更される。部分配列の独立したコピーが必要な場合は、Mat::clone() を使用する。 |
| roi | 関心領域。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| m | (全体または一部が)構築される行列に割り当てられる配列。これらのコンストラクタではデータはコピーされない。代わりに、mのデータまたはその部分配列を指すヘッダが構築され、それと関連付けられる。参照カウンタがあれば、それがインクリメントされる。したがって、このようなコンストラクタで作成した行列を変更すると、mの対応する要素も変更される。部分配列の独立したコピーが必要な場合は、Mat::clone() を使用する。 |
| ranges | 各次元に沿ったmの選択範囲の配列。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| m | (全体または一部が)構築される行列に割り当てられる配列。これらのコンストラクタではデータはコピーされない。代わりに、mのデータまたはその部分配列を指すヘッダが構築され、それと関連付けられる。参照カウンタがあれば、それがインクリメントされる。したがって、このようなコンストラクタで作成した行列を変更すると、mの対応する要素も変更される。部分配列の独立したコピーが必要な場合は、Mat::clone() を使用する。 |
| ranges | 各次元に沿ったmの選択範囲の配列。 |
|
explicit |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| vec | 要素が行列を構成するSTLベクトル。行列は単一の列を持ち、行数はベクトル要素の数に等しい。行列の型はベクトル要素の型に一致する。コンストラクタは任意の型を扱えるが、適切に宣言されたDataType が存在する型に限る。つまり、ベクトル要素はプリミティブな数値、または数値の同一型タプルでなければならない。混合型の構造体はサポートされない。対応するコンストラクタはexplicitである。STLベクトルは自動的にMatインスタンスへ変換されないため、Mat(vec)と明示的に記述する必要がある。データを行列にコピーしない限り(copyData=true)、ベクトルのデータ再確保を引き起こす可能性があるため新しい要素はベクトルに追加されず、その結果、行列のデータポインタが無効になる。 |
| copyData | STLベクトルの基となるデータを、新たに構築される行列にコピーする(true)か、共有する(false)かを指定するフラグ。データがコピーされる場合、確保されたバッファはMatの参照カウント機構を用いて管理される。データが共有される場合、参照カウンタはNULLであり、行列が破棄されるまでデータを解放してはならない。 |
|
explicit |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
|
explicit |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
|
explicit |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
|
explicit |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
|
explicit |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
|
explicit |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
|
explicit |
GpuMat からデータをダウンロードする
| cv::Mat::~Mat | ( | ) |
デストラクタ - release() を呼び出す
| cv::Mat::Mat | ( | Mat && | m | ) |
| void cv::Mat::addref | ( | ) |
参照カウンタをインクリメントする。
このメソッドは、行列データに関連付けられた参照カウンタをインクリメントする。行列ヘッダが外部のデータセットを指している場合(Mat::Mat を参照)、参照カウンタは NULL であり、この場合メソッドは何の効果も持たない。通常、メモリリークを避けるため、このメソッドを明示的に呼び出すべきではない。これは行列の代入演算子によって暗黙的に呼び出される。参照カウンタのインクリメントは、それをサポートするプラットフォームではアトミックな操作である。したがって、異なるスレッドで同じ行列を非同期に操作しても安全である。
| Mat & cv::Mat::adjustROI | ( | int | dtop, |
| int | dbottom, | ||
| int | dleft, | ||
| int | dright ) |
親行列内における部分行列のサイズと位置を調整する。
このメソッドは Mat::locateROI と相補的である。これらの関数の典型的な使い方は、親行列内における部分行列の位置を求め、その位置を何らかの形でシフトすることである。たとえば、ROIの外側のピクセルを考慮に入れる必要があるフィルタリング操作で必要となる。メソッドのすべての引数が正のとき、ROIは指定した量だけ全方向に拡大する必要がある。たとえば、次のようになる:
この例では、行列のサイズが各方向に4要素ずつ増加する。行列は左に2要素、上に2要素シフトされ、5x5カーネルによるフィルタリングに必要なすべてのピクセルが取り込まれる。
adjustROI は、調整後のROIが親行列の内側になるよう強制する。つまり、調整後のROIの境界は親行列の境界によって制約される。たとえば、部分行列 A が親行列の最初の行に位置しているときに A.adjustROI(2, 2, 2, 2) を呼び出した場合、A は上方向には拡大されない。
この関数は、filter2D やモルフォロジー操作などのOpenCVのフィルタリング関数によって内部的に使用される。
| dtop | 上側の部分行列境界を上方向にずらす量。 |
| dbottom | 下側の部分行列境界を下方向にずらす量。 |
| dleft | 左側の部分行列境界を左方向にずらす量。 |
| dright | 右側の部分行列境界を右方向にずらす量。 |
| void cv::Mat::assignTo | ( | Mat & | m, |
| int | type = -1 ) const |
convertTo の関数形式を提供する。
これは MatrixExpressions エンジンによって呼び出される内部用メソッドである。
| m | 出力先の配列。 |
| type | 出力先の配列に求めるビット深度(元の型と同じにする場合は-1)。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| idx | Mat::dims個のインデックスからなる配列。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| idx | Mat::dims個のインデックスからなる配列。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| i0 | 次元0に沿ったインデックス |
| i1 | 次元1に沿ったインデックス |
| i2 | 次元2に沿ったインデックス |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| i0 | 次元0に沿ったインデックス |
| i1 | 次元1に沿ったインデックス |
| i2 | 次元2に沿ったインデックス |
指定した配列要素への参照を返す。
テンプレートメソッドは、指定した配列要素への参照を返す。パフォーマンスを高めるため、インデックス範囲のチェックはDebug構成でのみ行われる。
単一のインデックス (i) を持つ形式は、単一行または単一列の2次元配列の要素にアクセスするのに使用できることに注意。つまり、たとえば A が 1 x N の浮動小数点行列で B が M x 1 の整数行列の場合、それぞれ A.at<float>(0,k+4) と B.at<int>(2*i+1,0) の代わりに、単純に A.at<float>(k+4) と B.at<int>(2*i+1) と書くことができる。
以下の例はヒルベルト行列を初期化する:
at 演算子で使用するサイズ識別子は任意に選べるわけではないことに留意すること。それはデータを取得しようとしている画像に依存する。以下の表でより詳しく説明する:
CV_8U の場合は Mat.at<uchar>(y,x) を使用する。CV_8S の場合は Mat.at<schar>(y,x) を使用する。CV_16U の場合は Mat.at<ushort>(y,x) を使用する。CV_16S の場合は Mat.at<short>(y,x) を使用する。CV_32S の場合は Mat.at<int>(y,x) を使用する。CV_32F の場合は Mat.at<float>(y,x) を使用する。CV_64F の場合は Mat.at<double>(y,x) を使用する。| i0 | 次元0に沿ったインデックス |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| i0 | 次元0に沿ったインデックス |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| row | 次元0に沿ったインデックス |
| col | 次元1に沿ったインデックス |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| row | 次元0に沿ったインデックス |
| col | 次元1に沿ったインデックス |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。2D配列向けの特別版(特に画像ピクセルの参照に便利)
| pt | Point(j,i) として指定された要素の位置。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。2D配列向けの特別版(特に画像ピクセルの参照に便利)
| pt | Point(j,i) として指定された要素の位置。 |
| MatIterator_< _Tp > cv::Mat::begin | ( | ) |
行列のイテレータを返し、それを最初の行列要素に設定する。
これらのメソッドは、行列の読み取り専用または読み書き可能なイテレータを返す。行列イテレータの使い方は、双方向STLイテレータの使い方と非常に似ている。以下の例では、アルファブレンディング関数が行列イテレータを使って書き直されている:
| MatConstIterator_< _Tp > cv::Mat::begin | ( | ) | const |
| int cv::Mat::channels | ( | ) | const |
行列のチャンネル数を返す。
このメソッドは行列のチャンネル数を返す。
| int cv::Mat::checkVector | ( | int | elemChannels, |
| int | depth = -1, | ||
| bool | requireContinuous = true ) const |
| elemChannels | 行列が持つべきチャンネル数または列数。2次元行列の場合、行列が1列のみのときはelemChannelsチャンネルを持つ必要があり、行列が1チャンネルのみのときはelemChannels列を持つ必要がある。3次元行列の場合は1チャンネルのみでなければならない。さらに、プレーン数が1でない場合は各プレーン内の行数が1でなければならず、各プレーン内の行数が1でない場合はプレーン数が1でなければならない。 |
| depth | 行列が持つべきビット深度。任意のビット深度でよい場合は-1に設定する。 |
| requireContinuous | 行列が連続していることを要求する場合はtrueに設定する。 |
次のコードは2次元行列での使用例を示す:
次のコードは3次元行列での使用例を示す:
| CV_NODISCARD_STD Mat cv::Mat::clone | ( | ) | const |
配列とその基になるデータの完全なコピーを作成する。
このメソッドは配列の完全なコピーを作成する。元の step[] は考慮されない。そのため、コピーされた配列は total()*elemSize() バイトを占める連続した配列となる。
| Mat cv::Mat::col | ( | int | x | ) | const |
指定した行列の列に対する行列ヘッダを作成する。
このメソッドは指定した行列の列に対する新しいヘッダを作成して返す。これは行列のサイズに関係なく O(1) の操作である。新しい行列の基になるデータは元の行列と共有される。Mat::row の説明も参照。
| x | 0始まりの列インデックス。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| r | 開始インデックスと終了インデックスの両方を含むRange構造体。 |
| Mat cv::Mat::colRange | ( | int | startcol, |
| int | endcol ) const |
| void cv::Mat::convertTo | ( | OutputArray | m, |
| int | rtype, | ||
| double | alpha = 1, | ||
| double | beta = 0 ) const |
配列を別のデータ型に変換する(省略可能なスケーリング付き)。
このメソッドは入力ピクセル値を変換先のデータ型に変換する。オーバーフローを避けるため、最後に saturate_cast<> が適用される:
\[m(x,y) = saturate \_ cast<rType>( \alpha (*this)(x,y) + \beta )\]
| m | 出力行列。操作前に適切なサイズや型を持っていない場合は再確保される。 |
| rtype | 出力行列に求める型、あるいは正確にはビット深度。チャンネル数は入力と同じであるためである。rtypeが負の場合、出力行列は入力と同じ型になる。 |
| alpha | 省略可能なスケール係数。 |
| beta | スケーリングされた値に加算する省略可能なデルタ。 |
| void cv::Mat::copyAt | ( | OutputArray | m | ) | const |
| void cv::Mat::copyAt | ( | OutputArray | m, |
| InputArray | mask ) const |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| m | 出力先の行列。操作前に適切なサイズや型を持っていない場合は例外がスローされる。 |
| mask | *thisと同じサイズの操作マスク。非ゼロの要素は、どの行列要素をコピーする必要があるかを示す。マスクはCV_8U型でなければならず、1チャンネルまたは複数チャンネルを持つことができる。 |
| void cv::Mat::copySize | ( | const Mat & | m | ) |
内部使用関数。_size, _step 配列を適切に再割り当てする
| void cv::Mat::copyTo | ( | OutputArray | m | ) | const |
行列を別の行列にコピーする。
このメソッドは行列データを別の行列にコピーする。データをコピーする前に、メソッドは次を呼び出す:
これにより、必要に応じて変換先の行列が再割り当てされる。m.copyTo(m); は問題なく動作するが、この関数は入力行列と変換先行列が部分的に重なる場合には対応していない。
操作マスクが指定されている場合、上記の Mat::create 呼び出しが行列を再割り当てするときは、新しく割り当てられた行列はデータをコピーする前にすべてゼロで初期化される。
変換先メモリの(再)割り当てが不要な場合(例: ROI の更新)は、copyAt() を使用すること。
| m | 出力先の行列。操作前に適切なサイズや型を持っていない場合は再確保される。 |
| void cv::Mat::copyTo | ( | OutputArray | m, |
| InputArray | mask ) const |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| m | 出力先の行列。操作前に適切なサイズや型を持っていない場合は再確保される。 |
| mask | *thisと同じサイズの操作マスク。非ゼロの要素は、どの行列要素をコピーする必要があるかを示す。マスクはCV_8U型でなければならず、1チャンネルまたは複数チャンネルを持つことができる。 |
| void cv::Mat::create | ( | const std::vector< int > & | sizes, |
| int | type ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| sizes | 新しい配列の形状を指定する整数の配列。 |
| type | 新しい行列の型。 |
| void cv::Mat::create | ( | int | ndims, |
| const int * | sizes, | ||
| int | type ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| ndims | 新しい配列の次元数。 |
| sizes | 新しい配列の形状を指定する整数の配列。 |
| type | 新しい行列の型。 |
| void cv::Mat::create | ( | int | rows, |
| int | cols, | ||
| int | type ) |
必要に応じて新しい配列データを割り当てる。
これは Mat の主要なメソッドの1つである。配列を生成する新しいスタイルのほとんどの OpenCV 関数およびメソッドは、各出力配列に対してこのメソッドを呼び出す。このメソッドは次のアルゴリズムを使用する:
このような仕組みにより、メモリ管理は堅牢かつ効率的になり、余分な記述を避けられる。つまり、通常は出力配列を明示的に割り当てる必要はない。すなわち、次のように書く代わりに:
次のように単純に書ける:
なぜなら、cvtColor は他の多くの OpenCV 関数と同様に、内部で出力配列に対して Mat::create() を呼び出すからである。
| rows | 新しい行数。 |
| cols | 新しい列数。 |
| type | 新しい行列の型。 |
| void cv::Mat::create | ( | Size | size, |
| int | type ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| size | 新しい行列サイズの別の指定方法:Size(cols, rows) |
| type | 新しい行列の型。 |
| Mat cv::Mat::cross | ( | InputArray | m | ) | const |
2つの3要素ベクトルの外積を計算する。
このメソッドは2つの3要素ベクトルの外積を計算する。ベクトルは同じ形状とサイズの3要素浮動小数点ベクトルでなければならない。結果はオペランドと同じ形状および型の別の3要素ベクトルとなる。
| m | もう一方の外積のオペランド。 |
| void cv::Mat::deallocate | ( | ) |
内部使用関数。代わりに 'release' メソッドの使用を検討すること。行列データを解放する
| int cv::Mat::depth | ( | ) | const |
行列要素のビット深度を返す。
このメソッドは行列要素のビット深度(各チャンネルの型)の識別子を返す。例えば、16ビット符号付き要素の配列の場合、メソッドは CV_16S を返す。行列型の完全な一覧には次の値が含まれる:
|
static |
対角行列を生成する。
このメソッドは指定された主対角成分から正方対角行列を生成する。
| d | 主対角を表す1次元行列。 |
| Mat cv::Mat::diag | ( | int | d = 0 | ) | const |
行列から対角成分を抽出する。
このメソッドは指定された行列の対角成分に対する新しいヘッダを作成する。新しい行列は単一列の行列として表される。Mat::row や Mat::col と同様に、これはO(1)の操作である。
| d | 対角のインデックス。以下の値を取る:
|
| double cv::Mat::dot | ( | InputArray | m | ) | const |
2つのベクトルの内積を計算する。
このメソッドは2つの行列の内積を計算する。行列が単一列または単一行のベクトルでない場合、上から下、左から右へのスキャン順序で1次元ベクトルとして扱われる。ベクトルは同じサイズと型でなければならない。行列が複数のチャンネルを持つ場合、すべてのチャンネルの内積が合算される。
| m | もう一方の内積のオペランド。 |
| size_t cv::Mat::elemSize | ( | ) | const |
行列要素のサイズをバイト単位で返す。
このメソッドは行列要素のサイズをバイト単位で返す。たとえば行列の型が CV_16SC3 の場合、このメソッドは 3*sizeof(short) すなわち 6 を返す。
| size_t cv::Mat::elemSize1 | ( | ) | const |
各行列要素のチャンネルのサイズをバイト単位で返す。
このメソッドは行列要素のチャンネルのサイズをバイト単位で返す。つまりチャンネル数は無視される。たとえば行列の型が CV_16SC3 の場合、このメソッドは sizeof(short) すなわち 2 を返す。
| bool cv::Mat::empty | ( | ) | const |
配列に要素がなければ true を返す。
このメソッドは Mat::total() が 0 であるか、Mat::data が NULL の場合に true を返す。pop_back() および resize() メソッドが存在するため、M.total() == 0 であっても M.data == NULL であるとは限らない。
| MatIterator_< _Tp > cv::Mat::end | ( | ) |
行列イテレータを返し、最後の行列要素の次の位置に設定する。
これらのメソッドは読み取り専用または読み書き可能な行列イテレータを返し、最後の行列要素の次の位置に設定する。
| MatConstIterator_< _Tp > cv::Mat::end | ( | ) | const |
|
static |
指定されたサイズと型の単位行列を返す。
このメソッドは Mat::zeros と同様に、Matlab形式の単位行列の初期化子を返す。Mat::ones と同様に、スケール操作を用いてスケーリングされた単位行列を効率的に生成できる:
| rows | 行数。 |
| cols | 列数。 |
| type | 生成される行列の型。 |
|
static |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| size | Size(cols, rows) による行列サイズの別指定方法。 |
| type | 生成される行列の型。 |
| void cv::Mat::forEach | ( | const Functor & | operation | ) |
指定された関数オブジェクトをすべての行列要素に対して並列に実行する。
引数として渡される操作は、関数ポインタ、関数オブジェクト、またはラムダ(C++11)でなければならない。
例1。以下の操作はいずれも、すべての行列要素の最初のチャンネルに 0xFF を設定する:
例2。ピクセルの位置を使用する場合:
| void cv::Mat::forEach | ( | const Functor & | operation | ) | const |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
|
static |
|
static |
そして標準アロケータ
| UMat cv::Mat::getUMat | ( | AccessFlag | accessFlags, |
| UMatUsageFlags | usageFlags = USAGE_DEFAULT ) const |
行列の逆行列を求める。
このメソッドは行列式を用いて逆行列を計算する。つまり一時的な逆行列オブジェクトがメソッドによって返され、より複雑な行列式の一部としてさらに利用したり、行列に代入したりできる。
| method | 行列の逆行列計算手法。cv::DecompTypes のいずれか |
| bool cv::Mat::isContinuous | ( | ) | const |
行列が連続しているかどうかを報告する。
このメソッドは、行列要素が各行の終わりに隙間なく連続して格納されている場合に true を返す。そうでない場合は false を返す。当然ながら 1x1 または 1xN の行列は常に連続している。Mat::create で生成された行列は常に連続している。しかし Mat::col や Mat::diag などを使って行列の一部を抽出した場合、または外部で確保されたデータに対して行列ヘッダを構築した場合、そのような行列はこの性質をもはや持たないことがある。
連続性フラグは Mat::flags フィールド内のビットとして格納され、行列ヘッダを構築するときに自動的に計算される。したがって連続性のチェックは非常に高速な操作であるが、理論上は次のように行うこともできる:
このメソッドはOpenCVのかなり多くの関数で使用されている。要点は、要素ごとの操作(算術演算や論理演算、数学関数、アルファブレンディング、色空間変換など)が画像の幾何形状に依存しないということである。したがって、すべての入力配列と出力配列が連続していれば、関数はそれらを非常に長い単一行のベクトルとして処理できる。以下の例は、アルファブレンディング関数をどのように実装できるかを示している:
この手法は非常に単純でありながら、特に画像がかなり小さく操作がきわめて単純な場合、単純な要素操作の性能を10〜20パーセント向上させることができる。
この関数におけるもう1つのOpenCVのイディオムは、出力配列に対する Mat::create の呼び出しである。これは、出力配列が既に適切なサイズと型を持っていない限り、出力配列を確保する。新しく確保された配列は常に連続しているが、Mat::create は常に新しい行列を確保するとは限らないため、出力配列をチェックする必要がある。
| bool cv::Mat::isSubmatrix | ( | ) | const |
行列が別の行列の部分行列である場合に true を返す
親行列の中で行列ヘッダの位置を特定する。
Mat::row, Mat::col, Mat::rowRange, Mat::colRange などを使って行列から部分行列を抽出すると、得られた部分行列は元の大きな行列の一部を指すだけになる。しかし各部分行列は、元の行列のサイズと、抽出された部分行列が元の行列内で占める位置を再構築するのに役立つ情報(datastart フィールドと dataend フィールドで表される)を保持している。locateROI メソッドはまさにそれを行う。
| wholeSize | this を一部として含む行列全体のサイズを格納する出力引数。 |
| ofs | 行列全体の内部における this のオフセットを格納する出力引数。 |
| MatExpr cv::Mat::mul | ( | InputArray | m, |
| double | scale = 1 ) const |
2つの行列の要素ごとの乗算または除算を実行する。
このメソッドは、省略可能なスケール付きで要素ごとの配列乗算を表す一時オブジェクトを返す。これはより単純な「\*」演算子に対応する行列乗算ではないことに注意。
例:
| m | *this と同じ型・同じサイズの別の配列、または行列式。 |
| scale | 省略可能なスケール係数。 |
|
static |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| ndims | 配列の次元数。 |
| sz | 配列の形状を指定する整数の配列。 |
| type | 生成される行列の型。 |
|
static |
指定されたサイズと型のすべての要素が1の配列を返す。
このメソッドは Mat::zeros と同様に、Matlab形式の1の配列の初期化子を返す。このメソッドを用いると、次のMatlabイディオムを使って配列を任意の値で初期化できることに注意:
上記の操作は、すべての要素が1の100x100行列を作成してから3を掛けるわけではない。代わりにスケール係数(この場合は3)を記憶しておき、実際に行列初期化子を呼び出すときにそれを使用する。
| rows | 行数。 |
| cols | 列数。 |
| type | 生成される行列の型。 |
|
static |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| size | 行列サイズ指定 Size(cols, rows) の代替指定方法。 |
| type | 生成される行列の型。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| ranges | 各配列次元に沿って選択された範囲の配列。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| roi | 矩形として指定された抽出対象の部分行列。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| ranges | 各配列次元に沿って選択された範囲の配列。 |
矩形の部分行列を抽出する。
これらの演算子は、*this の指定した部分配列に対して新しいヘッダを作成する。Mat::row, Mat::col, Mat::rowRange, Mat::colRange を最も一般化した形である。たとえば A(Range(0, 10), Range::all()) は A.rowRange(0, 10) と等価である。上記すべてと同様に、これらの演算子は O(1) の操作であり、行列データはコピーされない。
| rowRange | 抽出する部分行列の開始行と終了行。上側の境界は含まれない。すべての行を選択するには Range::all() を使う。 |
| colRange | 抽出する部分行列の開始列と終了列。上側の境界は含まれない。すべての列を選択するには Range::all() を使う。 |
代入演算子
これらは利用可能な代入演算子である。それぞれが大きく異なるため、必ず各演算子の引数の説明を読むこと。
| m | 代入される右辺の行列。行列の代入は O(1) の操作である。つまりデータはコピーされず共有され、参照カウンタがあればインクリメントされる。新しいデータを代入する前に、古いデータは Mat::release によって参照解除される。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| expr | 代入される行列式オブジェクト。代入操作の第1の形式とは異なり、第2の形式では、行列式の結果を収めるのに適切なサイズと型を持っていれば、すでに割り当て済みの行列を再利用できる。これは行列式が展開される実際の関数によって自動的に処理される。たとえば C=A+B は add(A, B, C) に展開され、add が C の自動再割り当てを行う。 |
| void cv::Mat::pop_back | ( | size_t | nelems = 1 | ) |
行列の末尾から要素を削除する。
このメソッドは、行列の末尾から1行以上を削除する。
| nelems | 削除する行数。総行数より大きい場合は例外がスローされる。 |
| uchar * cv::Mat::ptr | ( | const int * | idx | ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| const uchar * cv::Mat::ptr | ( | const int * | idx | ) | const |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| uchar * cv::Mat::ptr | ( | int | i0, |
| int | i1, | ||
| int | i2 ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| const uchar * cv::Mat::ptr | ( | int | i0, |
| int | i1, | ||
| int | i2 ) const |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| uchar * cv::Mat::ptr | ( | int | i0 = 0 | ) |
指定した行列の行へのポインタを返す。
これらのメソッドは、指定した行列の行に対する uchar* または型付きポインタを返す。これらのメソッドの使い方については Mat::isContinuous のサンプルを参照のこと。
| i0 | 0始まりの行インデックス。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| const uchar * cv::Mat::ptr | ( | int | i0 = 0 | ) | const |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| uchar * cv::Mat::ptr | ( | int | row, |
| int | col ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| row | 次元0に沿ったインデックス |
| col | 次元1に沿ったインデックス |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| row | 次元0に沿ったインデックス |
| col | 次元1に沿ったインデックス |
| const uchar * cv::Mat::ptr | ( | int | row, |
| int | col ) const |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| row | 次元0に沿ったインデックス |
| col | 次元1に沿ったインデックス |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| row | 次元0に沿ったインデックス |
| col | 次元1に沿ったインデックス |
行列の末尾に要素を追加する。
これらのメソッドは、行列の末尾に1つ以上の要素を追加する。STL の vector クラスの対応するメソッドを模倣している。elem が Mat の場合、その型と列数は対象のコンテナ行列と同じでなければならない。
| elem | 追加される要素。 |
| void cv::Mat::push_back | ( | const Mat & | m | ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| m | 追加される行。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| elem | 追加される要素。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| elem | 追加される要素。 |
| void cv::Mat::push_back_ | ( | const void * | elem | ) |
内部関数
| std::reverse_iterator< MatIterator_< _Tp > > cv::Mat::rbegin | ( | ) |
begin() と同じだが、逆方向の走査用である。
| std::reverse_iterator< MatConstIterator_< _Tp > > cv::Mat::rbegin | ( | ) | const |
| Mat cv::Mat::reinterpret | ( | int | type | ) | const |
行列の型をリセットする。
これらのメソッドは行列のデータ型をリセットする。新しい型と古い型の要素サイズが同じであれば、現在のバッファを再利用できる。このメソッドは、現在の mat が部分行列であるか、何らかの参照を持っているかを考慮する必要がある。
| type | 新しいデータ型。 |
| void cv::Mat::release | ( | ) |
参照カウンタをデクリメントし、必要に応じて行列を解放する。
このメソッドは、行列データに関連付けられた参照カウンタをデクリメントする。参照カウンタが0に達すると、行列データが解放され、データと参照カウンタのポインタが NULL に設定される。行列ヘッダが外部のデータセットを指している場合(Mat::Mat を参照)、参照カウンタは NULL であり、この場合メソッドは何も効果を持たない。
このメソッドは、行列データの解放を強制するために手動で呼び出すことができる。ただし、デストラクタや、データポインタを変更する他のメソッドによって自動的に呼び出されるため、通常は不要である。参照カウンタのデクリメントと0判定は、サポートするプラットフォームではアトミックな操作である。したがって、異なるスレッドから同じ行列を非同期に操作しても安全である。
| std::reverse_iterator< MatIterator_< _Tp > > cv::Mat::rend | ( | ) |
end() と同じだが、逆方向の走査用である。
| std::reverse_iterator< MatConstIterator_< _Tp > > cv::Mat::rend | ( | ) | const |
| void cv::Mat::reserve | ( | size_t | sz | ) |
指定した行数分の領域を予約する。
このメソッドは sz 行分の領域を予約する。すでに sz 行を格納できる十分な領域がある場合は何も起こらない。行列が再割り当てされる場合、最初の Mat::rows 行は保持される。このメソッドは STL の vector クラスの対応するメソッドを模倣している。
| sz | 行数。 |
| void cv::Mat::reserveBuffer | ( | size_t | sz | ) |
指定したバイト数分の領域を予約する。
このメソッドは sz バイト分の領域を予約する。すでに sz バイトを格納できる十分な領域がある場合は何も起こらない。行列を再割り当てしなければならない場合、それ以前の内容は失われることがある。
| sz | バイト数。 |
| Mat cv::Mat::reshape | ( | int | cn, |
| const std::vector< int > & | newshape ) const |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| cn | 新しいチャンネル数。引数が0の場合、チャンネル数は変更されない。 |
| newshape | 全次元にわたる新しい行列サイズを表すベクトル。一部のサイズが0の場合、それらの次元では元のサイズが使われる。 |
| Mat cv::Mat::reshape | ( | int | cn, |
| int | newndims, | ||
| const int * | newsz ) const |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| cn | 新しいチャンネル数。引数が0の場合、チャンネル数は変更されない。 |
| newndims | 新しい次元数。 |
| newsz | 全次元にわたる新しい行列サイズを表す配列。一部のサイズが0の場合、それらの次元では元のサイズが使われる。 |
| Mat cv::Mat::reshape | ( | int | cn, |
| int | rows = 0 ) const |
データをコピーせずに、2次元行列の形状やチャンネル数を変更する。
このメソッドは、*this の要素に対する新しい行列ヘッダを作成する。新しい行列は、異なるサイズや異なるチャンネル数を持つことができる。以下の条件を満たせば、任意の組み合わせが可能である。
たとえば、STL の vector として格納された3次元点の集合があり、それらの点を 3xN の行列として表現したい場合は、次のようにする。
3チャンネルの 2x2 行列を1チャンネルの 4x3 行列に reshape したもの。各列は元のいずれかのチャンネルの値を持つ。
または:
| cn | 新しいチャンネル数。引数が0の場合、チャンネル数は変更されない。 |
| rows | 新しい行数。引数が0の場合、行数は変更されない。 |
| void cv::Mat::resize | ( | size_t | sz | ) |
行列の行数を変更する。
これらのメソッドは行列の行数を変更する。行列が再割り当てされる場合、最初の min(Mat::rows, sz) 行は保持される。これらのメソッドは STL の vector クラスの対応するメソッドを模倣している。
| sz | 新しい行数。 |
| void cv::Mat::resize | ( | size_t | sz, |
| const Scalar & | s ) |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| sz | 新しい行数。 |
| s | 新しく追加された要素に代入される値。 |
| Mat cv::Mat::row | ( | int | y | ) | const |
指定した行列の行に対する行列ヘッダを作成する。
このメソッドは、指定した行列の行に対する新しいヘッダを作成して返す。行列のサイズに関係なく、これは O(1) の操作である。新しい行列の基となるデータは元の行列と共有される。以下は、LU など多くのアルゴリズムで使われる古典的な基本行列処理操作 axpy の例である。
| y | 0始まりの行インデックス。 |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| r | 開始インデックスと終了インデックスの両方を含むRange構造体。 |
| Mat cv::Mat::rowRange | ( | int | startrow, |
| int | endrow ) const |
|
static |
| Mat & cv::Mat::setTo | ( | InputArray | value, |
| InputArray | mask = noArray() ) |
配列要素のすべてまたは一部を指定した値に設定する。
これは Mat::operator=(const Scalar& s) 演算子の高度な変種である。
| value | 実際の配列型に変換されて代入されるスカラ。 |
| mask | *this と同じサイズの操作マスク。非ゼロ要素は、どの行列要素をコピーする必要があるかを示す。マスクは型 CV_8U でなければならず、1チャンネルまたは複数チャンネルを持てる |
| size_t cv::Mat::step1 | ( | int | i = 0 | ) | const |
正規化されたステップを返す。
このメソッドは、行列のステップを Mat::elemSize1() で割った値を返す。任意の行列要素に素早くアクセスするのに役立つ。
| MatExpr cv::Mat::t | ( | ) | const |
行列を転置する。
このメソッドは行列式を用いて行列の転置を行う。実際の転置を実行するのではなく、より複雑な行列式の一部としてさらに利用したり、行列に代入したりできる一時的な行列転置オブジェクトを返す:
| size_t cv::Mat::total | ( | ) | const |
| size_t cv::Mat::total | ( | int | startDim, |
| int | endDim = INT_MAX ) const |
配列の要素の総数を返す。
このメソッドは、startDim <= dim < endDim を満たすサブ配列スライス内の要素数を返す。
| int cv::Mat::type | ( | ) | const |
行列要素の型を返す。
このメソッドは行列要素の型を返す。これは CvMat の型システムと互換性のある識別子で、CV_16SC3(16ビット符号付き3チャンネル配列)などのようなものである。
| void cv::Mat::updateContinuityFlag | ( | ) |
内部使用メソッド: 連続性フラグを更新する
|
static |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| ndims | 配列の次元数。 |
| sz | 配列の形状を指定する整数の配列。 |
| type | 生成される行列の型。 |
|
static |
指定したサイズと型のゼロ配列を返す。
このメソッドは Matlab スタイルのゼロ配列初期化子を返す。定数配列を素早く生成して、関数の引数、行列式の一部、あるいは行列初期化子として使うのに利用できる:
上記の例では、A が 3x3 の浮動小数点行列でない場合にのみ新しい行列が確保される。それ以外の場合は、既存の行列 A がゼロで埋められる。
| rows | 行数。 |
| cols | 列数。 |
| type | 生成される行列の型。 |
|
static |
これは利便性のために提供されているオーバーロードされたメンバ関数である。上記の関数とは、受け取る引数のみが異なる。
| size | 行列サイズ指定 Size(cols, rows) の代替指定方法。 |
| type | 生成される行列の型。 |
| MatAllocator* cv::Mat::allocator |
カスタムアロケータ
| int cv::Mat::cols |
| uchar* cv::Mat::data |
データへのポインタ
| const uchar* cv::Mat::dataend |
| const uchar* cv::Mat::datalimit |
| const uchar* cv::Mat::datastart |
locateROI と adjustROI で使用される補助フィールド
| int cv::Mat::dims |
行列の次元数、>= 2
| int cv::Mat::flags |
いくつかのビットフィールドを含む:
| int cv::Mat::rows |
行数と列数。行列が3次元以上の場合は (-1, -1)
| MatSize cv::Mat::size |
| MatStep cv::Mat::step |