OpenCV中 IplImage 与 Mat的区别

 2023-09-10 阅读 26 评论 0

摘要:IplImage: 在OpenCV中IplImage是表示一个图像的结构体,也是从OpenCV1.0到目前最为重要的一个结构; 在之前的图像表示用IplImage,而且之前的OpenCV是用C语言编写的,提供的接口也是C语言接口; Mat: Mat是后来OpenCV封装的一个

IplImage:

在OpenCV中IplImage是表示一个图像的结构体,也是从OpenCV1.0到目前最为重要的一个结构;

在之前的图像表示用IplImage,而且之前的OpenCV是用C语言编写的,提供的接口也是C语言接口;


Mat:

Mat是后来OpenCV封装的一个C++类,用来表示一个图像,和IplImage表示基本一致,但是Mat还添加了一些图像函数;



在OpenCV中, IplImage 与 Mat是可以相互转换的;

 IplImage  转  Mat: 

// extern  IplImage * plpliamge; //假设 IplImage 已经创建;

 cv::Mat * pmatImage = new cv:Mat( IplImage, 0  ): //第二个参数表示不进行像素数据copy;


Mat 转 IplImage:

//extern cv:Mat  matImage; //假设已经创建cv:Mat;

IplImage limage = IplImage ( matImage );//不进行数据copy;


通常情况对于图像的读取,IplImage 通过 cvLoadImage,   cv:Mat通过 cv::imread;


对于内存图像数据创建稍有不同:

IplImage ,通过cvCreateImage, 创建后复制像素到创建的内存,或者cvCreateImageHeader和cvSetImageData创建;


cv::Mat,直接可以通过构造函数Mat(int _rows, int _cols, int _type, void* _data, size_t _step=AUTO_STEP); 直接创建;

示例:

cv::Mat * pMat = new cv::Mat( 288, 352,  CV_8UC3, imagebufdata );
IplImage IplImagetmp = IplImage(*pMat);

注意:是前两个参数是图像的height和width,不是width和height;


通过上面的描述可以看出,创建内存数据图像,直接通过 cv::Mat类比较简单,然后可以通过Mat获取IplImage,通过cvCreateImage等函数创建内存图像,比较麻烦,而且创建后,还要通过cvReleaseImage等函数释放内存,所以这里建议用cv::Mat创建;

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/40356.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息