![]() |
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 |
| 計算兩個 3 元素向量的叉乘。 | |
| void | deallocate (反分配) () |
| 內部使用函式,建議改用 'release' 方法;釋放矩陣資料 | |
| int | depth () const |
| 返回矩陣元素的深度。 | |
| Mat | diag (int d=0) const |
| 從矩陣中提取對角線。 | |
| double | dot (InputArray m) const |
| 計算兩個向量的點積。 | |
| 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 |
| 執行兩個矩陣的逐元素乘法或除法。 | |
| 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 |
| 在不復制資料的情況下更改 2D 矩陣的形狀和/或通道數。 | |
| 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) |
| 返回一個指定大小和型別的全 0 陣列。 | |
| 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 (行數) |
| 行數和列數,當矩陣超過 2 維時為 (-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}\]
對於二維陣列,上述公式簡化為:
\[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])。這意味著二維矩陣是逐行儲存的,三維矩陣是逐面儲存的,依此類推。M.step[M.dims-1] 是最小的,且始終等於元素大小 M.elemSize()。
因此,Mat 中的資料佈局與來自標準工具包和 SDK 的大多數密集陣列型別相容,例如 Numpy (ndarray)、Win32(裝置無關點陣圖)等,即與任何使用 steps(或 strides)來計算畫素位置的陣列相容。由於這種相容性,可以為使用者分配的資料建立一個 Mat 頭,並使用 OpenCV 函式進行就地處理。
建立 Mat 物件有許多不同的方法。最常用的選項列在下面:
clone() 方法。<< 運算子,後面跟上由逗號分隔的值,這些值可以是常量、變數、表示式等。此外,請注意需要額外的括號以避免編譯錯誤。陣列建立後,將透過引用計數機制自動管理。如果陣列頭是建立在使用者分配的資料之上的,你應該自己處理這些資料。當沒有物件指向陣列資料時,資料將被釋放。如果你想在呼叫陣列解構函式之前釋放陣列頭指向的資料,請使用 Mat::release()。
關於陣列類,下一個要學習的重要內容是元素訪問。本手冊已經介紹瞭如何計算每個陣列元素的地址。通常,你不必直接在程式碼中使用該公式。如果你知道陣列元素型別(可以使用方法 Mat::type() 檢索),你可以訪問二維陣列的元素 \(M_{ij}\),如下所示:
假設 M 是一個雙精度浮點陣列。針對不同的維數,at 方法有幾種變體。
如果你需要處理 2D 陣列的整行,最有效的方法是先獲取指向該行的指標,然後直接使用普通的 C 運算子 []:
某些操作(如上述操作)實際上並不依賴於陣列形狀。它們只是逐個處理陣列的元素(或者來自具有相同座標的多個數組的元素,例如陣列加法)。此類操作稱為 逐元素 操作。檢查所有輸入/輸出陣列是否連續(即每行末尾沒有間隙)是有意義的。如果是,則可以將它們作為一個長單行處理:
在連續矩陣的情況下,外層迴圈體僅執行一次。因此,開銷更小,這在小矩陣的情況下尤為明顯。
最後,還有 STL 風格的迭代器,它們足夠智慧,可以跳過連續行之間的間隙:
矩陣迭代器是隨機訪問迭代器,因此它們可以傳遞給任何 STL 演算法,包括 std::sort()。
| cv::Mat::Mat | ( | ) |
這些是構成矩陣的各種建構函式。正如在 AutomaticAllocation(自動分配)中所述,預設建構函式通常已經足夠,OpenCV 函式將分配適當的矩陣。構造的矩陣可以進一步賦值給另一個矩陣或矩陣表示式,或者使用 Mat::create 進行分配。在前一種情況下,舊內容將被取消引用。
| cv::Mat::Mat | ( | int | rows (行數), |
| int | cols (列數), | ||
| int | type ) |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| rows (行數) | 2D 陣列中的行數。 |
| cols (列數) | 2D 陣列中的列數。 |
| type | 陣列型別。使用 CV_8UC1, ..., CV_64FC4 建立 1-4 通道矩陣,或使用 CV_8UC(n), ..., CV_64FC(n) 建立多通道(最多 CV_CN_MAX 通道)矩陣。 |
| cv::Mat::Mat | ( | Size | size (大小), |
| int | type ) |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| size (大小) | 2D 陣列大小: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 (行數) | 2D 陣列中的行數。 |
| cols (列數) | 2D 陣列中的列數。 |
| type | 陣列型別。使用 CV_8UC1, ..., CV_64FC4 建立 1-4 通道矩陣,或使用 CV_8UC(n), ..., CV_64FC(n) 建立多通道(最多 CV_CN_MAX 通道)矩陣。 |
| s | 用於初始化每個矩陣元素的可選值。要在構造後將所有矩陣元素設定為特定值,請使用賦值運算子 Mat::operator=(const Scalar& value)。 |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| size (大小) | 2D 陣列大小: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 (行數) | 2D 陣列中的行數。 |
| cols (列數) | 2D 陣列中的列數。 |
| type | 陣列型別。使用 CV_8UC1, ..., CV_64FC4 建立 1-4 通道矩陣,或使用 CV_8UC(n), ..., CV_64FC(n) 建立多通道(最多 CV_CN_MAX 通道)矩陣。 |
| data (資料) | 指向使用者資料的指標。接收 data 和 step 引數的矩陣建構函式不會分配矩陣資料。相反,它們只是初始化指向指定資料的矩陣頭,這意味著不會複製資料。此操作非常高效,可用於使用 OpenCV 函式處理外部資料。外部資料不會自動釋放,因此你應該負責處理它。 |
| step (步長) | 每個矩陣行佔用的位元組數。該值應包括每行末尾的填充位元組(如果有)。如果缺少該引數(設定為 AUTO_STEP),則假定沒有填充,實際步長計算為 cols*elemSize()。見 Mat::elemSize。 |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| size (大小) | 2D 陣列大小: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),則假定沒有填充,實際步長計算為 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 個步長的陣列(最後一個步長始終設定為元素大小)。如果未指定,則假定矩陣是連續的。 |
| 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 個步長的陣列(最後一個步長始終設定為元素大小)。如果未指定,則假定矩陣是連續的。 |
| cv::Mat::Mat | ( | const Mat & | m, |
| const Range & | rowRange (行範圍), | ||
| const Range & | colRange = Range::all() ) |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| m | (全部或部分)分配給構造矩陣的陣列。這些建構函式不會複製資料。相反,它會構造並關聯一個指向 m 資料或其子陣列的頭。引用計數(如果有)會遞增。因此,當你修改使用此類建構函式形成的矩陣時,你也修改了 m 的相應元素。如果你想要一個子陣列的獨立複製,請使用 Mat::clone()。 |
| rowRange (行範圍) | 要獲取的 m 行的範圍。照例,範圍開始是包含的,範圍結束是排除的。使用 Range::all() 獲取所有行。 |
| colRange | 要獲取的 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。這意味著向量元素必須是原始數字或單型別數字組成的數值元組。不支援混合型別結構。相應的建構函式是顯式的。由於 STL 向量不會自動轉換為 Mat 例項,你應該顯式編寫 Mat(vec)。除非你將資料複製到矩陣中 (copyData=true),否則不會向向量新增新元素,因為這可能會導致向量資料重新分配,從而使矩陣資料指標失效。 |
| copyData | 標誌,指定 STL 向量的基礎資料是應複製到 (true) 還是與新構造的矩陣共享 (false)。複製資料時,分配的緩衝區使用 Mat 引用計數機制管理。當資料共享時,引用計數器為 NULL,在矩陣銷燬之前不應釋放資料。 |
|
explicit (顯式) |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
|
explicit (顯式) |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
|
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 不會向向上方向增加。
該函式由 OpenCV 濾波函式(如 filter2D)、形態學操作等在內部使用。
| dtop (頂部偏移) | 子矩陣上邊界向上偏移量。 |
| dbottom (底部偏移) | 子矩陣下邊界向下偏移量。 |
| dleft (左側偏移) | 子矩陣左邊界向左偏移量。 |
| dright (右側偏移) | 子矩陣右邊界向右偏移量。 |
| void cv::Mat::assignTo | ( | Mat & | m, |
| int | type = -1 ) const |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| idx (索引) | 包含 Mat::dims 個索引的陣列。 |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| idx (索引) | 包含 Mat::dims 個索引的陣列。 |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| i0 | 維度 0 的索引 |
| i1 | 維度 1 的索引 |
| i2 | 維度 2 的索引 |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| i0 | 維度 0 的索引 |
| i1 | 維度 1 的索引 |
| i2 | 維度 2 的索引 |
返回對指定陣列元素的引用。
模板方法返回對指定陣列元素的引用。為了提高效能,索引範圍檢查僅在 Debug 配置中執行。
請注意,具有單個索引 (i) 的變體可用於訪問單行或單列二維陣列的元素。也就是說,例如,如果 A 是 1 x N 浮點矩陣,而 B 是 M x 1 整數矩陣,你可以簡單地寫 A.at<float>(k+4) 和 B.at<int>(2*i+1),而不用分別寫 A.at<float>(0,k+4) 和 B.at<int>(2*i+1,0)。
下面的示例初始化了一個希爾伯特矩陣:
請記住,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 雙向迭代器的使用非常相似。在下面的示例中,使用矩陣迭代器重寫了 Alpha 混合函式
| 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-D 矩陣,當矩陣只有 1 列時,它應具有 elemChannels 個通道;當矩陣只有 1 個通道時,它應具有 elemChannels 列。對於 3-D 矩陣,它應只有 1 個通道。此外,如果平面(plane)數量不為 1,則每個平面內的行數必須為 1;如果每個平面內的行數不為 1,則平面數量必須為 1。 |
| depth | 矩陣應具有的深度。當任何深度都可以時,將其設定為 -1。 |
| requireContinuous | 設定為 true 以要求矩陣是連續的 |
以下程式碼演示了它在 2-d 矩陣中的用法
以下程式碼演示了它在 3-d 矩陣中的用法
| 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 |
| 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 的關鍵方法之一。大多數產生陣列的新式 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 |
計算兩個 3 元素向量的叉乘。
該方法計算兩個 3 元素向量的叉積。向量必須是具有相同形狀和大小的 3 元素浮點向量。結果是另一個具有與運算元相同形狀和型別的 3 元素向量。
| m | 另一個叉積運算元。 |
| void cv::Mat::deallocate | ( | ) |
內部使用函式,建議改用 'release' 方法;釋放矩陣資料
| int cv::Mat::depth | ( | ) | const |
返回矩陣元素的深度。
該方法返回矩陣元素深度的識別符號(每個單獨通道的型別)。例如,對於 16 位有符號元素陣列,該方法返回 CV_16S。完整的矩陣型別列表包含以下值:
|
static (靜態) |
建立對角矩陣
該方法從指定的主對角線建立一個方陣對角矩陣。
| d | 表示主對角線的一維矩陣。 |
| Mat cv::Mat::diag | ( | int | d = 0 | ) | const |
| double cv::Mat::dot | ( | InputArray | m | ) | const |
計算兩個向量的點積。
該方法計算兩個矩陣的點積。如果矩陣不是單列或單行向量,則使用從上到下、從左到右的掃描順序將它們視為 1D 向量。向量必須具有相同的大小和型別。如果矩陣具有多個通道,則將所有通道的點積相加。
| 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 (靜態) |
|
static (靜態) |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| size (大小) | 另一種矩陣尺寸指定方式為 Size(cols, rows)。 |
| type | 建立的矩陣型別。 |
| void cv::Mat::forEach | ( | const Functor & | operation (操作) | ) |
並行地對所有矩陣元素執行給定的仿函式。
作為引數傳遞的操作必須是函式指標、函式物件或 lambda(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 函式中使用。關鍵點在於,逐元素操作(如算術和邏輯操作、數學函式、Alpha 混合、顏色空間變換等)不依賴於影像幾何形狀。因此,如果所有輸入和輸出陣列都是連續的,則函式可以將它們作為非常長的單行向量處理。下面的示例說明了如何實現 Alpha 混合函式:
這種方法雖然非常簡單,但可以將簡單元素操作的效能提高 10-20%,尤其是當影像相當小且操作非常簡單時。
此函式中的另一個 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 |
執行兩個矩陣的逐元素乘法或除法。
該方法返回一個對陣列逐元素乘法的臨時編碼物件,帶有可選的縮放。請注意,這不符合更簡單的 "\*" 運算子對應的矩陣乘法。
示例
| m | 另一個與 *this 具有相同型別和大小的陣列,或矩陣表示式。 |
| scale | 可選的比例因子。 |
|
static (靜態) |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| ndims | 陣列維數。 |
| sz | 指定陣列形狀的整數陣列。 |
| type | 建立的矩陣型別。 |
|
static (靜態) |
返回指定大小和型別的全1陣列。
該方法返回一個 Matlab 風格的全 1 陣列初始化器,類似於 Mat::zeros。請注意,使用此方法,您可以使用以下 Matlab 習慣用法,以任意值初始化陣列:
上述操作不會先形成一個 100x100 的全 1 矩陣,然後再乘以 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 | 被賦值的矩陣表示式物件。與賦值操作的第一種形式相反,如果已分配的矩陣具有正確的尺寸和型別以適應矩陣表示式的結果,則第二種形式可以重用該矩陣。它由矩陣表示式展開成的實際函式自動處理。例如,C=A+B 展開為 add(A, B, C),而 add 負責自動重新分配 C。 |
| void cv::Mat::pop_back | ( | size_t | nelems = 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 | ) |
| 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 的索引 |
向矩陣底部新增元素。
這些方法在矩陣底部新增一個或多個元素。它們模仿 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 | 包含所有維度新矩陣尺寸的向量。如果某些尺寸為零,則假定這些維度使用原始尺寸。 |
| Mat cv::Mat::reshape | ( | int | cn, |
| int | newndims, | ||
| const int * | newsz ) const |
這是一個過載的成員函式,為方便起見而提供。它與上述函式的區別僅在於所接受的引數不同。
| cn | 新的通道數。如果引數為 0,則通道數保持不變。 |
| newndims | 新的維度數。 |
| newsz | 包含所有維度新矩陣尺寸的陣列。如果某些尺寸為零,則假定這些維度使用原始尺寸。 |
| Mat cv::Mat::reshape | ( | int | cn, |
| int | rows = 0 ) const |
在不復制資料的情況下更改 2D 矩陣的形狀和/或通道數。
該方法為 *this 的元素建立一個新的矩陣頭。新矩陣可以具有不同的尺寸和/或不同的通道數。任何組合都是可能的,只要:
例如,如果有一組儲存為 STL vector 的 3D 點,並且您想將這些點表示為 3xN 矩陣,請執行以下操作:
將 3 通道 2x2 矩陣重塑為 1 通道 4x3 矩陣,每一列包含來自原始通道之一的值
或者
| 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) 操作。新矩陣的基礎資料與原始矩陣共享。以下是一個經典的矩陣基礎處理操作 axpy 的示例,該操作被 LU 分解和許多其他演算法使用:
| 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 (靜態) |
返回一個指定大小和型別的全 0 陣列。
該方法返回一個 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 |
行數和列數,當矩陣超過 2 維時為 (-1, -1)
| MatSize cv::Mat::size |
| MatStep cv::Mat::step |