opencv之Mat类
来源:互联网 发布:知乎 恐惧 编辑:程序博客网 时间:2024/04/30 11:08
Mat类是opencv中最重要最基本的数据类型,它是由两个部分组成的类:包括数据头和一个数据指针,数据头包含有矩阵大小,存储方法等信息,数据指针则指向矩阵的储存地址。
这也是Mat类最大的特点。在数字opencv中,一副图像往往包含巨大的数据量,在进行参数传递时如果生成图像副本将付出很大的时间空间代价,而且这些参数传递中图像副本的创建往往是不必要的。Mat类使用了一种非常巧妙的办法来避免创建图像副本带来的弊端,它在创建新的Mat类拷贝时只创建一个新的数据头,而数据指针仍指向原来的矩阵,这就意味着新创建的图像拷贝和原图像共享数据区,而不用建立图像副本。如果想要建立图像副本的话,Mat类也提供了相应的函数供使用者建立图像副本,例如clone(),和copyto()。
Mat类与c语言中的IplImage不同之处在于Mat类实现了自动的内存管理,使用者不必手动控制内存的开辟和释放,当然相比于IplImage的手动管理要方便很多,当然,必要情况下Mat类也还是可以进行手动的内存管理的。
接下来就来看看Mat类包含有哪些信息。
1、矩阵头
Class CV_EXPORTS Mat
{
Public:
intflags; //矩阵的维度
int dims; //行列数,如果超过二维则为(-1,-1)
int rows,cols;//行和列数
uchar *data;//数据块的起始地址
int *refcount;//其他成员
}
注:CV_EXPORTS是声明导出类的意思,它的作用是是外部能够使用该类的全部功能,具体含义不必深究,不影响使用。
2、Mat类的相关操作
(1)常用的Mat类初始化方式
Mat M(nrows,ncols,type,fillValue); 例如:Mat M(7,7,CV_32FC2,Scalar(1,3));
M.create(nrows,ncols,type);
Mat M1=M.col(1);
Int sz[]={100,100,100};Mat M(3, sz, CV_8U,Scalar::all(0)); //sz[]被转化为一维
Mat roi(img,Rect(10,10,100,100));
Mat M1=M.clone();
Mat M1; copyTo(M1,M);
(2)常用矩阵操作
M.t(); //转置
M.inv(); //求逆
M.mul(M1); //矩阵乘
M.cross(M1); //叉积
M.dot(M1); //点积
(3)向量操作
M.push_back(elem);
M.pop_back();
(4)获得属性操作
M.isContinuous();
M.total(); //矩阵数据元素的个数
M.elemSize(); //每一个点的数据位数
M.elemSize1(); //每一个点的每一个通道的数据位数
M.type(); //数据类型,例如:CV_16SC3
M.depth(); //维度
M.channels(); //通道数
M.step(); //图像像素行的实际宽度
M.size(); //返回Size(rows,cols),size().x,size().y
M.empty(); //空则返回true
(4)指针与位置
M.ptr<typename>(i);//第i行指针
M.at(int i,int j,int k); //该位置像素值
M.at(int *idx);
M.begin(); //矩阵头指针
M.end(); //矩阵最后一个元素的后一个指针
(5)Mat_子类
Mat_<typename> M; //M(x,y)=M1.at(x,y);
- opencv之Mat类
- OpenCV之Mat类
- Opencv之Mat类
- openCV之Mat类解读
- OPENCV之Mat类详解
- OpenCV 之Mat类详解
- OpenCV之Mat类详解
- OpenCV参考手册之Mat类详解1
- OpenCV参考手册之Mat类详解1
- OpenCV参考手册之Mat类详解2
- OpenCV参考手册之Mat类详解1
- OpenCV参考手册之Mat类详解
- OpenCV参考手册之Mat类详解1 .
- OpenCV参考手册之Mat类详解2 .
- OpenCV参考手册之Mat类详解
- OpenCV参考手册之Mat类详解1
- OpenCV参考手册之Mat类详解
- OpenCV参考手册之Mat类详解
- 姜奇平:Facebook入华需遵守中国游戏规则
- Codeforces 3D Least Cost Bracket Sequence --- 贪心
- Valid Parentheses
- 迭代器模式
- JavaSE I/O 序列化Serializable
- opencv之Mat类
- gui 数字键盘相关
- C#中String类的几个方法(IndexOf、LastIndexOf、Substring)
- 信用卡透支2.4万不还被拘 “恶意透支”最重可判无期
- 对USB的认识
- Barn Repair-usaco
- UIView的layoutSubviews和drawRect方法何时调用
- 策略模式
- sql脚本的不同的查询