OpenCV中Mat、cvMat和IplImage类型转换

本文介绍OpenCV2.X中Mat、CvMat及IplImage三种图像容器的转换方法,包括Mat与IplImage/CvMat之间的相互转换细节及其注意事项。

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

转载至《图像处理编程实例》,朱伟编著。

OpenCV2.X中图像容器一般有Mat、CvMat和IplImage,Mat是一个多维的密集数据数组,常用于进行计算性较高的矩阵、图像、直方图操作等。cvMat和IplImage是OpenCV1.x中提供的基于C语言版本的图像数据容器,侧重于图像数据本身的处理性能。在实际应用场景中,我们常常需要将不同的参数类型进行相互转换。

1、Mat转换为IplImage类型和CvMat类型

cv::Mat img;
CvMat cvMatImg = img;
IplImage IplImg = img;

需要注意的是,转换后Mat,IplImage和CvMat共享图像矩阵数据,传递的是矩阵头,并不复制数据,IplImage和CvMat就没有引用计数功能,如果上述代码中的img的数据被释放,cvMatImg和IplImage也就失去了相应数据。因此在进行上述转换后对IplImage和CvMat对象进行操作时,一定不能将转换前的Mat对象提前释放。

2、IplImage类型和CvMat类型转换为Mat类型

IplImage *IplImg = cvLoadImage("fruits.jpg");
Mat img(IplImage, ture);

OpenCV2.x中提供Mat类兼容OpenCV1.x中IplImage和CvMat的两个构造函数:Mat::Mat(const CvMat* m, bool copyData = false)和Mat::Mat(const IplImage* img, bool copyData = false)。如果copyData的值是false,那么Mat将与IplImage或CvMat共用同一矩阵数据;如果copyData的值是true,Mat会新申请内存空间,然后将IplImage或CvMat的数据复制到Mat的数据区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值