opencv中CvMat,CvArr,Mat之间的关系

Opencv中可以代表和显示图像的类有三个:(1)CvMat;(2)plImage;(3)Mat;

其中,类之间的继承关系:CvArr -> CvMat -> IplImage ,Mat是C++版本的矩阵类型

(CvArr用作函数的参数,无论传入的是CvMat或IplImage,内部都是按CvMat处理)

 

其中,CvMat和Mat之间的相互转换如下:

(1)CvMat和CvMat之间的转换

//注意:深拷贝 - 单独分配空间,两者相互独立
CvMat* a;
CvMat* b = cvCloneMat(a);	//copy a to b

(2)Mat之间的复制

//注意:浅拷贝 -  不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用)
Mat a;
Mat b = a; //a "copy" to b
Mat c(a); //a "copy" to c
 
//注意:深拷贝
Mat a;
Mat b = a.clone(); //a copy to b
Mat c;
a.copyTo(c); //a copy to c

(3)CvMat转Mat

//使用Mat的构造函数:Mat::Mat(const CvMat* m, bool copyData=false);	默认情况下copyData为false
CvMat* a;
//注意:以下三种效果一致,均为浅拷贝
Mat b(a);	//a "copy" to b
Mat b(a, false);	//a "copy" to b
Mat b = a;	//a "copy" to b
 
//注意:当将参数copyData设为true后,则为深拷贝(复制整个图像数据)
Mat b = Mat(a, true); //a copy to b

(4)Mat转CvMat

//注意:浅拷贝
Mat a;
CvMat b = a; //a "copy" to b
 
//注意:深拷贝
Mat a;
CvMat *b;
CvMat temp = a; //转化为CvMat类型,而不是复制数据
cvCopy(&temp, b); //真正复制数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值