(修改)IplImage, CvMat,cv::Mat之间的转换

本文介绍了OpenCV中IplImage、CvMat与cv::Mat三种数据结构的区别,并提供了这些结构间转换的方法及图像文件的输入输出操作实例。
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);

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); //正确,这样也可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值