在新版本与旧版本之间纠结,到底是用Mat,还是Iplimage?

Mat 侧重于数据计算,而Iplimage注重于图像的处理。

因此,应根据具体需要灵活使用,那个好用用哪个,只要在两者之间进行转换即可。

一、派生关系:CvArr -> CvMat -> IplImage

IplImage由CvMat派生,而CvMat由CvArr派生

CvArr用作函数的参数,无论传入的是CvMat或IplImage,内部都是按CvMat处理。

二、转换方式:

1.  IplImage,CvMat 向Mat  转换:

主要利用Mat的构造函数

Mat::Mat(const CvMat* m, bool copyData=false);

因为IplImage是从CvMat派生而来,所以,两者的转换都采用该函数。其中,copyData表示是否复制数据。

例:

CvMat
 mI  ;

Mat
 I=Mat(mI);

2. Mat  向  IplImage,CvMat 转换:

(1)文件头的复制,只创建文件头,不复制数据

Mat  I;

IplImage  pI = I;或  IplImage  pI = IplImage (I);

CvMat  mI  = I;

(2)指针转换,需要调用IplImage和CvMat运算符得到指针,为了得到指针需要使用&符号:

Mat  I;

IplImage*  pI = &I.operator IplImage(); 或 IplImage*  pI
= &(IplImage(I));

CvMat*  mI = &I.operator CvMat();

3.CvMat 与 IplImage的转换

(1)CvMat 转向 IplImage

CvMat*  mat_origin;//可以
         IplImage  img_buffer ;

cvGetImage(mat_origin,&img_buffer);

(2) IplImage转向CvMat

法1:只生成一个新的矩阵头,而数据都指向原来的地址

CvMat mathdr,

*mat = cvGetMat( img, &mathdr );

其中, cvGetMatconst
CvArr* arr, CvMat* header)

法2:CvMat *mat = cvCreateMat( img->height, img->width, CV_64FC3 );
                    cvConvert( img, mat );

Mat ,IplImage, CvMat 之间的转换的总结的更多相关文章

  1. Mat, IplImage, CvMat, Cvarr关系及元素获取

    自己目前正打算整理opencv数据结构之间关系,寻寻觅觅之间,发现这篇博文很全面,总结得很好,故转之.红色部分不对,自己已修改! 原文地址:http://blog.csdn.net/abcjennif ...

  2. OpenCV图片类cv::Mat和QImage之间进行转换(好多相关文章)

    在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...

  3. OpenCV——Mat,IplImage,CvMat类型转换

    Mat,cvMat和IplImage这三种类型都可以代表和显示图像,三者区别如下 Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化. 而CvMat和IplImage类型更侧 ...

  4. mat 和IPIImage之间的转换

    opencv2.3.1 Mat::operator IplImageCreates the IplImage header for the matrix.C++: Mat::operator IplI ...

  5. OpenCV Mat与UIImage之间的转换

    UIImage 转 OpenCV cvMat: - (cv::Mat)cvMatWithImage:(UIImage *)image { CGColorSpaceRef colorSpace = CG ...

  6. opencv中Mat与IplImage,CVMat类型之间转换

    opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...

  7. CvMat、Mat、IplImage之间的转换详解及实例

    见原博客:http://blog.sina.com.cn/s/blog_74a459380101obhm.html OpenCV学习之CvMat的用法详解及实例 CvMat是OpenCV比较基础的函数 ...

  8. CvArr、Mat、CvMat、IplImage、BYTE转换

    一.Mat类型:矩阵类型,Matrix.     在openCV中.Mat是一个多维的密集数据数组. 能够用来处理向量和矩阵.图像.直方图等等常见的多维数据.     Mat有3个重要的方法:     ...

  9. 图像处理之opencv---mat、cvmat、IplImage之间的转换

    一.Mat类型:矩阵类型,Matrix.  在openCV中,Mat是一个多维的密集数据数组.可以用来处理向量和矩阵.图像.直方图等等常见的多维数据. Mat有3个重要的方法: 1.Mat mat = ...

随机推荐

  1. Python基础(8)_迭代器、生成器、列表解析

    一.迭代器 1.什么是迭代 1 重复 2 下次重复一定是基于上一次的结果而来 l=[,,,] count= while count < len(l): print(l[count]) count ...

  2. Linux基本命令 权限管理命令

    1.权限管理命令chmod ================================================================================== 命令名 ...

  3. 计算机网络概述 传输层 TCP流量控制

    TCP流量控制 所谓流量控制就是让发送发送速率不要过快,让接收方来得及接收.利用滑动窗口机制就可以实施流量控制.通过运用TCP报文段中的窗口大小字段来控制,发送方的发送窗口不可以大于接收方发回的窗口大 ...

  4. 一句white-space:nowrap解决IE6,IE7下浮动元素不自动换行

    一句white-space:nowrap解决IE6,IE7下浮动元素不自动换行

  5. js常用方法汇总

    产生在m.n之间的随机整数 //Math.round()把数四舍五入为最接近的整数. function random(m, n) { return Math.round(Math.random() * ...

  6. Go 语言为Fibonacci函数实现Read方法

    Go语言非常灵活,只要为对象实现了相应的方法就可以把他看成实现了某个接口,类似于Durk Type, 为Fibonacci实现Read方法,就可以像读取文件一样,去读取下一个Fibonacci值. 示 ...

  7. iptables DNAT、SNAT和MASQUERATE

    MASQUERADE 地址伪装,和SNAT功能一样,只不过SNAT使用固定IP地址,MASQUERADE使用网卡上的地址. SNAT配置: iptables -t nat -A POSTROUTING ...

  8. JAVA Excel导入导出

    --------------------------------------------方式一(新)-------------------------------------------------- ...

  9. JAVA 使用qq邮箱发送邮件

    引入一个架包: gradle( "com.sun.mail:javax.mail:1.5.6", ) 代码如下: private static final String QQ_EM ...

  10. C++中容器的使用(一)

    C++中有两种类型的容器:顺序容器和关联容器. 顺序容器主要有vector.list.deque等.其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque ...