本文主要是介绍OpenCV中 IplImage 与 Mat,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
转自:http://blog.csdn.net/chinabinlang/article/details/40982065
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创建;
这篇关于OpenCV中 IplImage 与 Mat的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!