在新版本与旧版本之间纠结,到底是用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. Use Private Members from Base Class

    最近看了一段代码:在导出类中调用继承自基类的某个public函数,该函数中对基类中的private数据成员 进行了赋值并将结果打印.看到程序的运行结果后,顿时感觉自己之前(我之前的理解这里就不说明了) ...

  2. Shell Step by Step

    @1:Command: ctrl+z  ------->切后台 fg ------->切前台 Ctrl + a :移到命令行首 Ctrl + e :移到命令行尾 Ctrl + u :从光标 ...

  3. 函数编程——匿名函数与lambda(一)

    python允许用lambda关键字创造匿名函数. 匿名函数是因为不需要以标准的方式来声明,比如说,使用def语句. 但是,作为函数,它们也能有参数. 一个完整的lambda“语句”代表了一个表达式, ...

  4. 2015/7/29 (高开,V形反转,各种指标背离——可惜没买进,填补空缺图形的心理分析)

    1.李大--謝先生℡:早盘决策:如今日再次出现大幅低开  或者盘中大幅下跌可逢低 3成仓位左右分散资金做短线抄底,切记是超短 绝不追高,设置5个点止损.市场有很多名家在谈论3373点即前低点,本人告诉 ...

  5. 2015.7.7——跌停板做T,就算要搏跌停反弹也要看卖一档压力啊

    1.今天中色股份和以往不同买卖盘为正!————今天要重新观察这种新常态下的盘面运作 是否会出现如2015.7.6中描述的“前期错过了皮城中的黄金买点,...其实只要买卖盘为负,后期还会有再次尝试该低点 ...

  6. Python操作SQLAlchemy

    Mysql环境: MySQL 一.概述什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其为数据库 什么是 MySQL.Oracle.SQLite.Access.MS ...

  7. 02_虚拟机的安装和SecureCRT、FileZilla、Xmanage、UltraEdit工具的介绍

    上述几个工具连接不成功的情况,很多时候是因为ssh服务没有安装,CentOS默认安装,不会出现问题,Ubuntu桌面版默认没有安装,需要手动安装,安装部分参考下文SecureCRT部分 一.安装Cen ...

  8. 【leetcode刷题笔记】Palindrome Partitioning II

    Given a string s, partition s such that every substring of the partition is a palindrome. Return the ...

  9. C语言:内存字节对齐详解

    转:http://blog.csdn.net/arethe/article/details/2548867 一.什么是对齐,以及为什么要对齐: 1. 现代计算机中内存空间都是按照byte划分的,从理论 ...

  10. NoSQL数据库memcache和redis区别

    在web后台发开面试中,经常会被问道memcache和redis的区别和使用情况. 其中memcache和redis都是基于内存存储的缓存系统,存储形式key--value键值对的形式. 区别: 1. ...