CvMat,Mat,Iplimage的理解和应用

这个链接非常有用
http://www.cnblogs.com/Key-Ky/p/4150531.html

新手常用的一些转换:
1.CvMat*和Iplimage*的转换关系

  CvMat* pic =cvLoadImageM("ubuntu.png");
  IplImage*pic1=cvCreateImage(cvGetSize(pic),IPL_DEPTH_8U,3);

  //IplImage->cvmat
  //这个函数直接讲图像载入矩阵中
  //cvmat*->iplimage*
  cvGetImage(pic,pic1);
  //iplimage*->cvmat*
  cvGetMat(pic1,pic);
  //iplimage*<->cvmat*
  cvConvert( pic,pic1 );

2.CvMat*和Iplimage*->Mat(指针转换成矩阵)
这里要注意了,新旧版本的opencv的在这里的处理办法会不一样(wtf),可以参考链接:
http://www.cnblogs.com/edver/p/5187190.html

对于opencv3.0以上的版本,可以:

//Cvmat*->mat(iplimage*同理)
  CvMat* pic=cvLoadImageM("ubuntu.png");
  Mat pic1=cvarrToMat(pic);

对于老版的opencv可以:

//Cvmat*->mat
CvMat* pic=cvLoadImageM("ubuntu.png");
Mat a(pic);

3.mat->const cvarr*(矩阵转换成指针)

//mat->const cvarr*
  CvMat* pic=cvLoadImageM("ubuntu.png");
  Mat pic1=cvarrToMat(pic);
  const CvMat* s=(CvMat*) &pic1;

写代码的时候不要忘记上面的取值运算符&,先是取址,然后进行强制类型转换。

4.对于新手来说,理解CvMat和Mat的区别真的是wtf,看了很多资料,觉得最有用的是这个句子
CvMat* m=cvCreateMat(int cows,int cols,int types);
这里types可以是任意的预定义类型,如rgb或者是别的多通道的数据,这用的目的是让CvMat更好地表示一幅图像,而不是想只是像Mat一样只能用简单的基本数据类型。

总结:千里之行,始于足下!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值