在新版本与旧版本之间纠结,到底是用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. JavaWeb:Tomcat服务器的安装与配置

    Tomcat服务器的安装与配置 安装 输入网址进入Tomcat的官网            在左边导航栏选择对应下载的版本            下载安装包形式            下载并解压到我们 ...

  2. 通过ip得到所在城市,以及城市所在经纬度坐标(监控系统中用的该代码,小航哥)

    监控系统中就是利用的该段代码,实现通过ip得到所在城市,以及城市所在经纬度坐标,最后得以利用echarts实现模拟迁移的效果 api官方介绍: http://lbsyun.baidu.com/inde ...

  3. Yii2 自定义独立验证器

    新建一个文件: ?php /** * author : forecho <caizhenghai@gmail.com> * createTime : 2015/7/1 14:54 * de ...

  4. 每天一个Linux命令(43)at命令

        at命令用于在指定时间执行命令.at允许使用一套相当复杂的指定时间的方法.可以用相对时间法指定,也可以用绝对时间法指定.     (1)用法:     用法:  at  [选项参数]  [时间 ...

  5. [Papers]Finding Advertising Keywords on Web Pages

    参考资料: Finding Advertising Keywords on Web Pages ,Wen-tau Yih,Joshua Goodman, Vitor R. Carvalho

  6. @MarkFan 口语练习录音 20140406 [美女与野兽的口语练习录音]

    大家好,您现在收听的是美女与野兽的口语练习录音 敢于追求,不惧任何挑战,才是勇敢的人生.试想一下,世界上每天有多少人为了梦想,为了生活,甚至是为了别人在不停地奔跑.假若你此刻心中装有梦想,却碍于现实不 ...

  7. 线性代数:A转置乘以A可逆

    如果A的列向量线性无关,则 T(A)*A得到一个可逆的方阵. 假设A是一个kxn的矩阵,那么T(A)*A是一个nxn的方阵:要证明这个方阵可逆,只要证明N(T(A)*A) = 零空间即可. 假设列向量 ...

  8. flume 使用遇到问题及解决

    1. ../flume/fchannel/spool/data/ 目录下发生缓存文件积压 可能原因:同一时间同一客户端下向两个监控目录mv文件:或同一时间多个客户端向服务端上传文件 2.清空../fl ...

  9. Android 开发人员必须掌握的 10 个开发工具

    Android 开发人员必须掌握的 10 个开发工具 Android SDK 本身包含很多帮助开发人员设计.开发.测试和发布 Android 应用的工具,在本文中,我们将讨论 10 个最常用的工具. ...

  10. ggplot笔记002——qplot()函数

    qplot()函数 一年前就听说过ggplot,很多人都说ggplot强大,ggplot无所不能,从今天开始就让我们一起来见证一下这个神奇的R包. 首先要加载ggplot2: 1 if(!suppre ...