Mat::~Mat
Mat的析構函數。
C++: Mat::~Mat()
析構函數調用Mat::release()。
Mat::operator =
提供矩陣賦值操作。
C++: Mat& Mat::operator=(const Mat& m)
C++: Mat& Mat::operator=(const MatExpr_Base& expr)
C++: Mat& Mat::operator=(const Scalar& s)
參數:
m – 被賦值的右側的矩陣。 矩陣的賦值是一個復雜度為O(1) 的操作。 這就意味着沒有數據段復制而且有數量的遞增兩矩陣將使用同一引用計數器。
在給矩陣賦新數據之前先由Mat::release()釋放引用。
expr –被賦值的矩陣表達式對象。 作為第一種賦值方式的逆操作另外一種形式能夠被又一次用到具有適當大小和尺寸的已分配空間的矩陣上以適應表達式的結果。矩陣表達式擴展得到的實函數將自己主動處理這個分配過程。
比如:
C=A+B 擴展成add(A, B, C) , andadd() 要當心C又一次分配數據的操作。
.
s – 標量賦值給每個矩陣元,矩陣的大小和類型將不會改變。有現成的賦值運算符。因為他們各不同樣請閱讀運算符參數說明。
Mat::operator MatExpr
提供一種Mat-to-MatExpr轉換運算符
C++: Mat::operator MatExpr_<Mat, Mat>() const
轉換運算符不能顯示調用而是由矩陣表達式引擎(Matrix Expression engine)內部調用The cast operator should not be called explicitly. It is used internally by the Matrix Expressions engine.
Mat::row
創建一個指定行數的矩陣頭。.
C++: Mat Mat::row(int i) const
參數:
i – 一個0基的行索引.
該方法創建一個具有指定了行數的新矩陣頭的矩陣並返回它。
這是一個復雜度為O(1) 的操作。無須考慮矩陣的尺寸。新矩陣和原矩陣共享一份基礎數據。這是一個典型基本矩陣處理操作的樣例, axpy是LU和很多其他算法都使用的一個函數
inline void matrix_axpy(Mat& A, int i, int j, double alpha)
{
A.row(i) += A.row(j)*alpha;
}
Note:在當前實現中。以下的代碼不會無法按預期的效果工作:
Mat A ;
...
A.row(i) = A.row(j) ;/ /不起作用
發生這樣的情況是由於 A.row(i) 形成暫時矩陣頭進一步分配給還有一個矩陣頭。請記住,每一個操作復雜度為O(1),即沒有復制不論什么數據。
因此,假設你預期第 j行被拷貝到第 i行,那么上述賦值不成立。要做到這一點。應該把這樣的簡單的賦值轉換到表達式中或使用 Mat::copyTo() 方法:
Mat A ;
...
/ / 可行,但看上去有點目的不明白。
A.row(i) = A.row(j) + 0;
/ / 這是有點兒長。但這是推薦的方法。
A.row(j).copyTo(A.row(i)) ;
Mat::col
創建一個具有指定了矩陣頭中列數這個參數的矩陣
C++: Mat Mat::col(int j) const
參數:
j –一個0基(從0開始)的列索引
該方法創建一個具有指定了矩陣頭中列數這個參數的新矩陣並作為函數返回值。
這是一種復雜度為O(1)的操作,不用考慮矩陣的尺寸大小。新矩陣和原始矩陣共享一份基礎數據。參看Mat::row()說明信息。
Mat::rowRange
為指定的行span創建一個新的矩陣頭。
C++: Mat Mat::rowRange(int startrow, int endrow) const
C++: Mat Mat::rowRange(const Range& r) const
參數:
startrow – 一個包容性的0基(從0開始)的行span起始索引.。
endrow – 一個0基的獨占性的行span.終止索引。
r – Range 結構包括着起始和終止的索引值。該方法給矩陣指定的行span創建了新的頭。 與Mat::row() 和 Mat::col()相類似這是一個復雜度為O(1)的操作。
Mat::colRange
為指定的行span創建一個矩陣頭。
C++: Mat Mat::colRange(int startcol, int endcol) const
C++: Mat Mat::colRange(const Range& r) const
參數:
startcol – 一個包容性的0基(從0開始)的span列起始索引。
endcol –一個0基的獨占性的列span.終止索引。
r –Range 結構包括着起始和終止的索引值。該方法給矩陣指定的列span創建了新的頭。
與Mat::row() 和 Mat::col()相類似這是一個復雜度為O(1)的操作。
Mat::diag
提取或創建矩陣對角線。
C++: Mat Mat::diag(int d) const
C++: static Mat Mat::diag(const Mat& matD)
參數:
d – 對角線的索引值,能夠是下面的值:
– d=0 是主對角線
– d>0表示下半部的對角線。
比如:d=1對角線是緊挨着住對角線並位於矩陣下方。
– d<0表示來自矩陣上半部的對角線。比如:d= 1表示對角線被設置在對角線的上方並緊挨着。
matD – 單列用於形成矩陣對角線的列。
該方法為指定的矩陣創建一個新的頭。
然后新矩陣被切割為單獨的列矩陣。
類似於Mat::row() 和Mat::col() ,它是復雜度為O(1)操作。
Mat::clone
創建一個數組及其基礎數據的完整副本。
C++: Mat Mat::clone() const
該方法創建了一個完整的數組副本。原始的step[]不會被考慮在內的。因此數組的副本是一占用total()*elemSize()字節的連續陣列。
Mat::copyTo
把矩陣拷貝到還有一個矩陣中。
C++: void Mat::copyTo(OutputArray m) const
C++: void Mat::copyTo(OutputArray m, InputArray mask) const
參數:
m – 目標矩陣。
假設它的尺寸和類型不對,在操作之前會又一次分配。
mask – 操作掩碼。它的非零元素表示矩陣中某個要被復制。
該方法把矩陣的拷貝到還有一個新的矩陣中在復制之前該方法會調用
m.create(this->size(), this->type);
因此,目標矩陣會在必要的情況下又一次分配
雖然m.copyTo(m) works flawlessly,該函數並不處理源矩陣和目標矩陣之間有重疊的部分的情況。
當操作掩碼指定以及上述的Mat::create又一次分配矩陣,新分配的矩陣在數據拷貝到里面之前全都被初始化為0。
Mat::convertTo
在縮放或不縮放的情況下轉換為還有一種數據類型。
C++:
void Mat::convertTo(OutputArray m,int rtype,double alpha=1,double beta=0)const
參數:
m – 目標矩陣。假設它的尺寸和類型不對,在操作之前會又一次分配。
rtype – 要求是目標矩陣的類型,或者在當前通道數與源矩陣通道數同樣的情況下的depth。
假設rtype 為負。目標矩陣與源矩陣類型同樣。
beta – 可選的delta加到縮放值中去。
該方法將源像素值轉化為目標類型saturate_cast<> 要放在最后以避免溢出
m( x;y) = saturate_cast < rType > ( α*( *this)( x;y) +β)
Mat::assignTo
提供了一個convertTo的功能形式。
C++: void Mat::assignTo(Mat& m, int type=-1 ) const
Parameters
m – 目標陣列。
type – 要求是目標陣列depth或-1(假設陣列的類型和源矩陣類型同樣)
這是一個 internally 使用的由 Matrix Expressions引擎調用的方法。
Mat::setTo
將陣列中全部的或部分的元素設置為指定的值。
C++: Mat& Mat::setTo(const Scalar& s, InputArray mask=noArray())
參數:
s – 把標量賦給陣列並轉化到陣列的實際類型。
mask – 與 *this尺寸同樣的操作掩碼。這是Mat::operator=(const Scalar& s)運算符的一個高級變量。
Mat::reshape
在無需復制數據的前提下改變2D矩陣的形狀和通道數或當中之中的一個。
C++: Mat Mat::reshape(int cn, int rows=0) const
參數:
cn – 新的通道數。若cn=0,那么通道數就保持不變。
rows –新的行數。 若rows = 0, 那么行數保持不變。
該方法為*this元素創建新的矩陣頭。這新的矩陣頭尺寸和通道數或當中之中的一個發生改變,在下面的情況隨意組合都是有可能的:
ü 新的矩陣沒有新增或降低元素。通常。rows*cols*channels()在轉換過程中保持一致。.
ü 無數據的復制。也就是說。這是一個復雜度為 O(1)的操作。通常,假設該操作改變行數或透過其它方式改變元素行索引,那么矩陣必然是連續的。參見Mat::isContinuous()。
比如,有一存儲了STL向量的三維點集。你想用3xN的矩陣來完畢以下的操作:
std::vector<Point3f> vec;
...
Mat pointMat = Mat(vec). //把向量轉化成Mat, 復雜度為O(1)的運算
reshape(1). // 從Nx1的3通道矩陣得出Nx3 的單通道矩陣
//相同是復雜度為O(1)的運算
t(); // 最后轉置Nx3 的矩陣
//這個過程要復制全部的元素
Mat::t
轉置矩陣。.
C++: MatExpr Mat::t() const
該方法通過矩陣表達式(matrix expression)實現矩陣的轉置The method performs matrix transposition by means of matrix expressions. 它並未真正完畢了轉置但卻返回一個暫時的能夠進一步用在更復雜的矩陣表達式中或賦給一個矩陣的轉置矩陣對象:
Mat A1 = A + Mat::eye(A.size(), A.type)*lambda;
Mat C = A1.t()*A1; //計算(A + lambda*I)^t * (A + lamda*I).
Mat::inv
反轉矩陣
C++: MatExpr Mat::inv(int method=DECOMP_LU) const
參數:
method – 反轉矩陣的方法。有下面幾種可能的值:
– DECOMP_LU是 LU 分解一定不能是單數的。
– DECOMP_CHOLESKY 是 Cholesky LLT僅僅適用於對稱正矩陣的分解。
該類型在處理大的矩陣時的速度是LU的兩倍左右。
– DECOMP_SVD是 SVD 分解。
假設矩陣是單數或甚至不是2維。函數就會計算偽反轉矩陣。
該方法運行矩陣的反轉矩陣表達。
這意味着該方法返回一個暫時矩陣反轉對象並可進一步用於更復雜的矩陣表達式的中或分配給一個矩陣。
Mat::mul
運行兩個矩陣按元素相乘或這兩個矩陣的除法。
C++: MatExpr Mat::mul(InputArray m, double scale=1) const
參數:
m – 與*this具有同樣類型和大小的矩陣,或矩陣表達式。
scale – 可選縮放系數。
該方法返回一個用可選的縮放比率編碼了每一個元素的數組乘法的暫時的對象。 注意:這不是一個相應“*”運算符的簡單的矩陣乘法。
.
例::
Mat C = A.mul(5/B); // 等價於divide(A, B, C, 5)
Mat::cross
計算3元素向量的一個叉乘積。
C++: Mat Mat::cross(InputArray m) const
參數:
m –還有一個叉乘操作對象。
該方法計算了兩個3元素向量的叉乘的積被操作向量必須是3元素浮點型的具有同樣形狀和尺寸的向量。結果也是一語被操作對象的具有同樣形狀和大小的浮點型3元素向量。
Mat::dot
計算兩向量的點乘。
C++: double Mat::dot(InputArray m) const
參數:
m –還有一個點積操作對象。
方法計算兩個矩陣的點積。假設矩陣不單列或單行的向量,用頂部究竟部從左到右掃描次序將它們視為 1 D向量。這些向量必須具有同樣的大小和類型。
假設矩陣有多個通道,從全部通道得到的點積會被加在一起。
Mat::zeros
返回指定的大小和類型的零數組。
C++: static MatExpr Mat::zeros(int rows, int cols, int type)
C++: static MatExpr Mat::zeros(Size size, int type)
C++: static MatExpr Mat::zeros(int ndims, const int* sizes, int type)
參數
ndims – 數組的維數。
rows–行數。
cols –列數。
size–替代矩陣大小規格Size(cols, rows)的方法。
sizes– 指定數組的形狀的整數數組。
type– 創建的矩陣的類型。
該方法返回一個 Matlab 式的零數組初始值設定項。
它能夠用於高速形成一個常數數組作為函數參數。作為矩陣的表達式或矩陣初始值設定項的一部分。
Mat A;
A = Mat::zeros (3。3。CV_32F);
在上面的演示樣例中,僅僅要A不是 3 x 3浮點矩陣它就會被分配新的矩陣。
否則為現有的
矩陣 A填充零。
Mat::ones
返回一個指定的大小和類型的全為1的數組。
C++: static MatExpr Mat::ones(int rows, int cols, int type)
C++: static MatExpr Mat::ones(Size size, int type)
C++: static MatExpr Mat::ones(int ndims, const int* sizes, int type)
參數:
ndims –數組的維數。
rows –行數。.
cols –列數。
size –替代矩陣大小規格Size(cols, rows)的方法。
sizes –指定數組的形狀的整數數組。
type –創建的矩陣的類型。
該方法返回一個 Matlab 樣式 1 的數組初始值設定項。類似Mat::zeros()。
請注意,這樣的方法中你能夠使用隨意一個值和Matlab 語法初始化數組例如以下:
Mat A = Mat::ones (100。100,CV_8U) * 3 。/ / 使100 x 100 矩陣里充滿 3。
上述操作不會形成一個 100 x 100 1 的矩陣。然后乘以 3。相反,它僅僅是記住
縮放因子(在本例中 3)在實際調用矩陣初始值設定項時使用它。