有关Mat的函数

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


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhang11wu4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值