Overview:总结下它们之间的不同
1. IplImage 和 CvMat 是C语言的struct。 而cv::Mat 是c++中的结构。
2.IplImage 是针对图像来的。它的成员处理row,column以外,还有nChannel, aiphaChannel,
depth 等图像才有的信息。而CvMat和cv::Mat 针对矩阵,方便了矩阵操作,当然cv::Mat 作为c++的类,可以帮你去管理内存的分配,这样就不用自己去create和release了,比cvMat要方便。
下面主要介绍下IplImage 和 cv::Mat 的文件IO操作以及他们之间的相互转化
1. IplImage 的文件IO
#include
#include
#include
IplImage * src_Img = NULL;
src_Img = cvLoadImage( ".//input.jpg" , CV_LOAD_IMAGE_GRAYSCALE );
cvReleaseImage (& src_Img);
2.Mat 读取图像
Mat mat = imread (".//input.jpg" , CV_8UC1 );
3.CvMat 转Mat(亲测可用)
CvMat *a ;
Mat b = Mat(a, true);
Mat b = Mat(a, true);
4. CvMat 转 IplImage
IplImage* img = cvCreateImage(cvGetSize(mat),8,1);
cvGetImage(matI,img);
cvSaveImage("rice1.bmp",img);
5.IplImage 转 CvMat
cvMat好像不能直接从文件中读取,要从IpImage转化而来。
IplImage * src_Img = NULL;
src_Img = cvLoadImage( ".//input.jpg" , CV_LOAD_IMAGE_GRAYSCALE );
cvMat *src_mat = cvCreateMat(src_Img->height,
src_Img->width);
cvConvert (src_Img , src_mat );
cvReleaseImage (& src_Img);
cvReleaseMat (&src_mat );
6.IplImage* 转 Mat
IplImage* pImg = cvLoadImage("lena.jpg");
cv::Mat img(pImg,0); //0是不复制影像,也就是pImg与img的data共用同个记忆体位置,header各自有
7.Mat 转 IplImage
cv::Mat img;
IplImage image(img);
8.Mat 转 CvMat
OpenCV 里面很多函数例如cvZeros 等的输入参数都是CvArr *. Mat 是不能直接转CvArray的
Mat m = imread("input.jpg", CV_8UC1);
cvZeros(&m); // 错误
*****************
CvMat m1 = m; //浅拷贝, 不会复制数据,只会指向m中的数据
cvZeros(&m); //正确
********************
cvZero (&(CvMat ) mat); //正确,这样也可
本文介绍了OpenCV中IplImage、CvMat与cv::Mat三种数据结构的区别,并提供了这些结构间转换的方法及图像文件的输入输出操作实例。
IplImage, CvMat,cv::Mat之间的转换&spm=1001.2101.3001.5002&articleId=51097851&d=1&t=3&u=3d9f24a9594b49c598c27558669df8b6)
5791

被折叠的 条评论
为什么被折叠?



