OpenCV 图像类型写法与转换:Mat和IPLImage

转自:https://blog.csdn.net/qq_37764129/article/details/81271660
OpenCV1基于C接口定义的图像存储格式IplImage*,直接暴露内存,如果忘记释放内存,就会造成内存泄漏。从OpenCV2开始,开始使用Mat类存储图像,其新的C++接口,cv::Mat代替了原来c风格的CvMat和IplImage。目前,2.0版本对c的接口也是支持的。
相对于c的接口,c++的cv::Mat统一了矩阵和图像这两个概念。事实上,矩阵和图像其实是一样的。由于cv::Mat是c++的类,所以也具备了相关的一些特征。例如,内存的释放。在C++中,一个对象超出其使用范围后,会自动调用析构函数进行销毁。而在c中,如果给CvMat类型的变量使用函数cvCreateImage 等函数分配了内存空间,那么必须调用相应的函数cvReleaseImage进行释放,而不会自动销毁。如果没有相应的释放,则会造成内存泄漏。

Mat和IplImage的区别如下:
OpenCV 图像类型写法与转换:Mat和IPLImage
lplImage程序:

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include "stdio.h"

int main(void)
{
IplImage* Image;
IplImage* Image_Gray; // c语言中,声明需要在语句之前
Image = cvLoadImage("D:\\opencv2.4.4\\lema.jpg", 1); // 载入图片,1-彩色
Image_Gray = cvCreateImage(cvGetSize(Image), Image->depth, 1); // 创建内存
cvCvtColor(Image, Image_Gray, CV_BGR2GRAY); // 彩色图->灰度图
cvShowImage("Image", Image);
cvShowImage("Image_Gray", Image_Gray);
cvWaitKey(0);
cvReleaseImage(&Image);
cvReleaseImage(&Image_Gray);
return 0;
}

Mat程序:

#include "cv.h"
#include "cxcore.h"
#include "highgui.h"
#include <iostream>
using namespace std;
using namespace cv;
 
int main(void)
{
Mat Image = imread("D:\\opencv2.4.4\\lema.jpg",1);
imshow("Image", Image);
Mat Image_Gray;
cvtColor(Image, Image_Gray, CV_BGR2GRAY, 0);
imshow("Image_Gray", Image_Gray);
waitKey(0);
return 0;
}

OpenCV 图像类型写法与转换:Mat和IPLImage

参考博客;

https://blog.csdn.net/lanjingling09/article/details/27707049

https://blog.csdn.net/xumi13/article/details/52737563

https://blog.csdn.net/ayuee1992/article/details/38122609