OpenCv2 学习笔记(3) Mat、CvMat和IplImage的相互转化

本文介绍了在OpenCV 2.4.9中不同数据结构之间的转换方法,包括Mat、IplImage和CvMat之间的相互转换,对于使用C++接口进行图像处理的开发者来说非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在opencv2.4.9有一些函数仍然是没有C++接口,因此在opencv2中有时需要用到CvMat或者IplImage,那么这些数据结构之间怎么彼此进行转换是需要考虑的一个问题。我们可以从需要的一种数据结构中读取并赋值到新的数据结构中去,这是一种深复制。通常我们需要的的是数据本身,而不是需要对数据进行更改,因此选择opencv自带的函数是比较合适的,因为大多数的函数都是浅复制。

1、Mat –> IplImage

Mat mt;                          // Mat重载了“=”操作符
IplImage img1 = mt;              // 浅复制
IplImage img2 = &(IplImage)mt;   // 浅复制 

2、Mat –> CvMat

Mat mt;   // Mat重载了“=”操作符
CvMat cmt1 = mt;   // 浅复制
CvMat cmt2(mt);    // 浅复制

3、IplImage –> Mat

IplImage *img = cvLoadImage("lena.bmp", 0);
Mat mt1(img);                    //浅复制
Mat mt1 = img;                   //同上

Mat mt2 = cvarrToMat(img,flase); //第二个参数默认为flase,不复制数据,浅复制;true时深复制

4、IplImage –> CvMat

IplImage *img = cvLoadImage("lena.bmp", 0); // CV_8UC3
CvMat cmt1;               
cvGetMat(img,&cmt1);     //浅复制

CvMat *cmt2 = cvCreateMat(img->height, img->width, CV_64FC3);
cvConvert(img,cmt2)     // 或cvConvetScale, cmt2必须分配空间

5、CvMat –> IplImage

CvMat cmt
IplImage img;
cvGetImage(&oldmat, &img);    // img的类型同cmt一样,不管img原来是什么类型

6、CvMat –> Mat

CvMat = cmt;
Mat mt1 = cmt;                   // 浅复制
Mat mt2(cmt);                    // 同上
Mat mt3 = cvarrToMat(&cmt,false);//第二个参数默认为flase,不复制数据,浅复制;true时深复制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

aworkholic

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

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

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

打赏作者

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

抵扣说明:

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

余额充值