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
expr
C=A+B 扩展成add(A, B, C) , andadd() 要当心C重新分配数据的操作。.
s
Mat::operator MatExpr
提供一种Mat-to-MatExpr转换运算符
C++: Mat::operator MatExpr_() 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 –
该方法创建一个具有指定了行数的新矩阵头的矩阵并返回它。这是一个复杂度为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
该方法创建一个具有指定了矩阵头中列数这个参数的新矩阵并作为函数返回值。这是一种复杂度为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
endrow
r
Mat::colRange
为指定的行span创建一个矩阵头。
C++: Mat Mat::colRange(int startcol, int endcol) const
C++: Mat Mat::colRange(const Range& r) const
参数:
startcol
endcol
r
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
beta
该方法将源像素值转化为目标类型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
这是一个 internally 使用的由 Matrix Expressions引擎调用的方法。
Mat::setTo
将阵列中所有的或部分的元素设置为指定的值。
C++: Mat& Mat::setTo(const Scalar& s, InputArray mask=noArray())
参数:
s
mask
Mat::reshape
在无需复制数据的前提下改变2D矩阵的形状和通道数或其中之一。
C++: Mat Mat::reshape(int cn, int rows=0) const
参数:
cn
rows
该方法为*this元素创建新的矩阵头。这新的矩阵头尺寸和通道数或其中之一发生改变,在以下的情况任意组合都是有可能的:
ü
ü
例如,有一存储了STL向量的三维点集,你想用3xN的矩阵来完成下面的操作:
std::vector 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
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
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)在实际调用矩阵初始值设定项时使用它。