CvMat、Mat、IplImage之间的转换

 使用场景:

        Opencv中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage,他们都可以显示图像,但是,Mat类型侧重于计算,数学性较高。而CvMat和IplImage类型更侧重于“图像”。在Opencv2.0之前,Opencv的库函数是完全用C实现的。其中Mat是OpenCV和C++的接口矩阵类,IplImage是OpenCV和C语言的接口的结构体。

1、IplImage与Mat之间转换

1.1、 IplImage—>Mat

//浅拷贝:

IplImage* pBinary=cvLoadImage("c://temp.jpg",0);

Mat Img;

Img=cvarrToMat(pBinary);

//深拷贝:

IplImage* pBinary=cvLoadImage("c://temp.jpg", 0);

Mat ImgTemp;

Img=cvarrToMat(pBinary);

Mat Img = ImgTemp.clone();

1.2、 Mat—>IplImage

//浅拷贝:

Mat Img=imread("1.jpg");

IplImage* pBinary = &IplImage(Img);

//深拷贝:

Mat Img=imread("1.jpg");

IplImage* pBinary = &IplImage(Img);

IplImage *input = cvCloneImage(pBinary);

2、IplImage与cvMat之间转换

2.1、 IplImage—>CvMat

//法一:cvGetMat函数

IplImage* img;

CvMat temp;

CvMat* mat = cvGetMat(img, &temp); //深拷贝

//法二:cvConvert函数

//注意height和width的顺序

CvMat *mat = cvCreateMat(img->height, img->width, CV_64FC3);

cvConvert(img, mat); //深拷贝

2.2、 CvMat—>IplImage

//法一:cvGetImage函数

CvMat M;

IplImage* img = cvCreateImageHeader(M.size(), M.depth(), M.channels());

cvGetImage(&M, img); //深拷贝:函数返回img

//法二:cvGetImage函数

CvMat M;

IplImage* img = cvGetImage(&M, cvCreateImageHeader(M.size(), M.depth(), M.channels()));

//法三:cvConvert函数

CvMat M;

IplImage* img = cvCreateImage(M.size(), M.depth(), M.channels());

cvConvert(&M, img); //深拷贝

3、Mat 与cvMat之间转换

3.1 CvMat—>Mat

//使用Mat的构造函数:Mat::Mat(const CvMat* m, bool copyData=false); 默认情况下copyData为false

CvMat* a;

//均为浅拷贝

Mat b(a); //a "copy" to b

Mat b(a, false); //a "copy" to b

Mat b = a; //a "copy" to b

//深拷贝:当将参数copyData设为true后,则为深拷贝(复制整个图像数据)

Mat b = Mat(a, true); //a copy to b

3.2 Mat—>CvMat

//注意:浅拷贝

Mat a;

CvMat b = a; //a "copy" to b

//注意: 深拷贝

Mat a;

CvMat *b;

CvMat temp = a; //转化为CvMat类型,而不是复制数据

cvCopy(&temp, b); //真正复制数据 cvCopy使用前要先开辟内存空间

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐凡星

你的鼓励将是我的动力;

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值