Mat类成员函数
1.addref()
为数据矩阵增加参考数,为防止内存泄露,一般不能显示调用,在多线程访问同一块数据区域是安全的。
2.adjustROI(int dtop, intdbottom, int dleft, int dright)
调整ROI区域的位置
3.assignTo(Mat& m,inttype=-1) const
内部调用,convertTo的函数形式,m是目的矩阵,type目的矩阵深度,-1则与原来矩阵相同。
4.at()
返回指定数组元素的引用。
5.begin()
返回矩阵的iterator,并指向第一个元素。
6.end()
返回矩阵的iterator,并指向最后一个元素后的位置。
7.=(const Mat& m)|(constMatExpr_Base& expr)|(const Scalar& s)
CvScalar:1,2,3或4元组,double类型
(1)m,不复制数据,只是共享和引用数的增加,在分配新数据之前,用release()释放原数据;
(2)expr,分配矩阵表达式对像。与第一项相对,如果已存在的矩阵有正确的大小和类型,就会这利用这些矩阵,并自动把表达式
扩展到真正的函数来进行处理。例:C=A+B is expanded to add(A, B, C) , and add() takes care ofautomatic C reallocation.
(3)为矩阵的每个元素分配元组,矩阵的类型与大小没有变。
8.row(int i)
为指定矩阵的行创建矩阵头。它不考虑矩阵大小,所创建矩阵头所对应的矩阵与原矩阵共享数据。
它是O(1),不复制数据,所以在进行赋值操作时,比如把j行数据赋值给i行,简单的用以下表达式是不对的,
Mat A;
...
A.row(i) = A.row(j); // will not work
原因就是row()不进行数据复制,要解决这类问题,要采用表达式方式或CopyTo()函数来解决。
Mat A;
...
// works, but looks a bit obscure.
A.row(i) = A.row(j) + 0;//只所以这个也可以,是因为opencv会自动把表达映射成实际的函数来进行处理,达到复制数据的目的。
// this is a bit longe, but the recommended method.
A.row(j).copyTo(A.row(i));
9.col(int j)
与row相似,创建指定列的矩阵头。
10.rowRange(int startrow,intendrow) const,rowRange(const Range& r) const
创建指定行范围的矩阵头。类似row(),col()。
11.colRange(int startcol, intendcol) const,colRange(const Range&r) const
创建指定列范围的矩阵头。类似row(),col()。
12.diag(int d)
从矩阵中抽取一条对角线,或创建一个对角矩阵。
d=0,抽取主对角线;
d>0,抽取下半部分对角线。例如,d=1指抽取紧邻主对角线下方的对角线;
d<0,抽取上半部分对角线。例如,d=-1指抽取紧邻主对角线上方的对角线;
13.total()
返回数组元素的数目(如果数组是图像,则返回像素的数目)。
14.elemSize()
返回矩阵元素的字节数。
15.clone()
创建一个数组和潜在数据的全复制。复制的数组是连续的,占total()*elemSize() bytes。
16.copyTo()
copyTo(OutputArray m)
copyTo(OutputArray m, InputArray mask)
m 目的矩阵,copyTo前如果在类型或大小上不合适,则重新分配。在函数执行前启动(m.create(this->size(),this->type);)。
mask 操作掩模。其中的非零元素指出要复制的位置。
17.convertTo()
convertTo(OutputArray m, int rtype, double alpha=1,double beta=0 )
把一个数组转换为另一种数据类型的数组。
18.setTo(const Scalar& s,InputArray mask=noArray())
设置所有或部分数据元素为指定数值。
19. reshape(int cn, int rows=0)
不复制数据,改变2D矩阵的形状和通道数。
cn-新的通道数,如果=0,与原矩阵保持一样;
row-新的行数,如果=0,与原矩阵保持一样;
20.t()
矩阵转置。
21.inv(int method=DECOMP_LU)
翻转一个矩阵。
22.mul(InputArray m, double scale=1)
对两个矩阵进行按元素乘或除运算。
23.cross(InputArray m)
计算两个3元向量的向量积。
24.dot(InputArray m)
向量内积。
25.zero()
zeros(introws, intcols, int type)
zeros(Sizesize, inttype)
zeros(intndims, const int*sizes,int type)
返回指定大小和类型的数组。
26.ones()
生成初始化元素为1的元素。
27.eye()
eye(introws, intcols, int type)
eye(Sizesize, inttype)
生成单位矩阵。
28.create()
create(introws,intcols, int type)
create(Sizesize,inttype)
create(intndims,const int*sizes, int type)
Mat color;
...
Mat gray;
cvtColor(color, gray, CV_BGR2GRAY);
29.resize()
resize(size_tsz)¶
resize(size_tsz,const Scalar&s)¶
改变矩阵行数。
30.reserve(size_t sz)
保留指定行数的空间。
31.push_back()
push_back(const T&elem)¶
push_back(const Mat&elem)¶
矩阵末行添加元素。
32. pop_back(size_tnelems=1)¶
移除矩阵末行的元素。
33.locateROI(Size&wholeSize,Point&ofs)
在父矩阵中安置子矩阵头的位置。
34.elemSize1()
返回单个通道元素字节大小。
35.type()
返回矩阵元素类型。
35.depth()
返回矩阵元素深度。
CV_8U - 8-bit unsignedintegers ( 0..255 )
CV_8S - 8-bit signed integers( -128..127 )
CV_16U - 16-bit unsignedintegers ( 0..65535 )
CV_16S - 16-bit signedintegers ( -32768..32767 )
CV_32S - 32-bit signedintegers ( -2147483648..2147483647 )
CV_32F - 32-bitfloating-point numbers ( -FLT_MAX..FLT_MAX, INF, NAN )
CV_64F - 64-bitfloating-point numbers ( -DBL_MAX..DBL_MAX, INF, NAN )
36.channels()
返回矩阵通道数。
37.step1()
返回一个规则的步长。
38.size()
返回矩阵大小。
39.empty()
如果矩阵没有元素则返回true。
40.prt
ptr(inti=0)
ptr(inti=0)
ptr(inti=0)
ptr(inti=0)
返回指定行的指针。
41.at()
返回指定数组元素的引用。
类似网页:http://note.sdo.com/u/xiaowan3/n/d1mS~jYE3oiwE0jg00at0