expr–被赋值的矩阵表达式对象。 作为第一种赋值方式的逆操作第二种形式可以被重新用到具有适当大小和尺寸的已分配空间的矩阵上以适应表达式的结果。矩阵表达式扩展得到的实函数将自动处理这个分配过程。opencv10 教程例如:
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) 形成临时矩阵头进一步分配给另一个矩阵头。opencv10 教程请记住,每个操作复杂度为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)的操作。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-65348-5.html
前提是男性的颜值身材要过关