CvArr、Mat、CvMat、IplImage、BYTE转换(总结而来)

转载自http://blog.csdn.net/wuxiaoyao12/article/details/7305848

一、Mat类型:矩阵类型,Matrix。

    在openCV中,Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。

    Mat有3个重要的方法:

         1、Mat mat = imread(const String* filename);            读取图像

         2、imshow(const string frameName, InputArray mat);      显示图像

         3、imwrite (const string& filename, InputArray img);    储存图像

    Mat类型较CvMat与IplImage类型来说,有更强的矩阵运算能力,支持常见的矩阵运算。在计算密集型的应用当中,将CvMat与IplImage类型转化为Mat类型将大大减少计算时间花费。

A.Mat -> IplImage

同样只是创建图像头,而没有复制数据。

例: // 假设Mat类型的imgMat图像数据存在

IplImage pImg= IplImage(imgMat); 

B.Mat -> CvMat

与IplImage的转换类似,不复制数据,只创建矩阵头。

例: // 假设Mat类型的imgMat图像数据存在

     CvMat cvMat = imgMat;

 

二、CvMat类型与IplImage类型:“图像”类型

       在openCV中,Mat类型与CvMat和IplImage类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化。而CvMat和IplImage类型更侧重于“图像”,openCV对其中的图像操作(缩放、单通道提取、图像阈值操作等)进行了优化。

补充:IplImageCvMat派生,而CvMatCvArr派生即CvArr -> CvMat -> IplImage

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

1.CvMat

A.CvMat-> IplImage

IplImage* img = cvCreateImage(cvGetSize(mat),8,1);
cvGetImage(matI,img);

cvSaveImage("rice1.bmp",img);

B.CvMat->Mat

与IplImage的转换类似,可以选择是否复制数据。

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

在openCV中,没有向量(vector)的数据结构。任何时候,但我们要表示向量时,用矩阵数据表示即可。

但是,CvMat类型与我们在线性代数课程上学的向量概念相比,更抽象,比如CvMat的元素数据类型并不仅限于基础数据类型,比如,下面创建一个二维数据矩阵:

              CvMat* cvCreatMat(int rows ,int cols , int type);

这里的type可以是任意的预定义数据类型,比如RGB或者别的多通道数据。这样我们便可以在一个CvMat矩阵上表示丰富多彩的图像了。

 

2.IplImage

在类型关系上,我们可以说IplImage类型继承自CvMat类型,当然还包括其他的变量将之解析成图像数据。

IplImage类型较之CvMat多了很多参数,比如depth和nChannels。在普通的矩阵类型当中,通常深度和通道数被同时表示,如用32位表示RGB+Alpha.但是,在图像处理中,我们往往将深度与通道数分开处理,这样做是OpenCV对图像表示的一种优化方案。

IplImage的对图像的另一种优化是变量origin----原点。在计算机视觉处理上,一个重要的不便是对原点的定义不清楚,图像来源,编码格式,甚至操作系统都会对原地的选取产生影响。为了弥补这一点,openCV允许用户定义自己的原点设置。取值0表示原点位于图片左上角,1表示左下角。

dataOrder参数定义数据的格式。有IPL_DATA_ORDER_PIXEL和IPL_DATA_ORDER_PLANE两种取值,前者便是对于像素,不同的通道的数据交叉排列,后者表示所有通道按顺序平行排列。

IplImage类型的所有额外变量都是对“图像”的表示与计算能力的优化。

A.IplImage -> Mat

IplImage* pImg = cvLoadImage("lena.jpg");
Mat img(pImg,0); // 0是不複製影像,也就是pImgimgdata共用同個記憶體位置,header各自有
B.IplImage -> CvMat

1CvMat mathdr, *mat = cvGetMat( img, &mathdr );

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

C.IplImage*-> BYTE*

BYTE* data= img->imageData;

 

CvMat和IplImage创建时的一个小区别:

1、建立矩阵时,第一个参数为行数,第二个参数为列数。

CvMat* cvCreateMat( int rows, int cols, int type );

2、建立图像时,CvSize第一个参数为宽度,即列数;第二个参数为高度,即行数。这 个和CvMat矩阵正好相反。

IplImage* cvCreateImage(CvSize size, int depth, int channels );

CvSize cvSize( int width, int height );

 

IplImage内部buffer每行是按4字节对齐的,CvMat没有这个限制

 

补充:

A.BYTE*-> IplImage*

img= cvCreateImageHeader(cvSize(width,height),depth,channels);

cvSetData(img,data,step);

//首先由cvCreateImageHeader()创建IplImage图像头,制定图像的尺寸,深度和通道数;

//然后由cvSetData()根据BYTE*图像数据指针设置IplImage图像头的数据数据,

//其中step指定该IplImage图像每行占的字节数,对于1通道的IPL_DEPTH_8U图像,step可以等于width


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android权限【大全】 .

1 android.permission.ACCESS_CHECKIN_PROPERTIES 2 //允许读写访问”properties”表在checkin数据库中,改值可以修改上传 3 4 android.permission.ACCESS_COARSE_LOCATION 5 //允许一个程序访问CellID或WiFi热点来获取粗略的位置 6 7 android.permission.ACCESS_FI…

css高度背景怎么填充整屏,004-CSS怎样让背景充满整个屏幕

...Your content goes here...给body标签指定背景图,这样背景图就可以填充整个浏览器viewport了。其实,该方案对所有的块级容器都可以生效。块级容器的宽高是动态的,那么背景图将自动伸缩,充满整个容器。CSS body标签的样式如下&a…

pcap python 生成_python+pcap+dpkt 抓包小实例

1 #!/usr/bin/env python2 #-*- coding: utf-8 -*-34 """网络数据包捕获与分析程序"""56 importpcap7 importdpkt8 importjson9 importre10 importtime11 from urllib importunquote1213 #过滤输出目标ip14 dst_lists [15 203.66.1.212, #nslook…

计算机视觉、机器学习相关领域论文和源代码大集合

原文转自:http://blog.csdn.net/zouxy09/article/details/8550952 计算机视觉、机器学习相关领域论文和源代码大集合--持续更新…… zouxy09qq.com http://blog.csdn.net/zouxy09 注:下面有project网站的大部分都有paper和相应的code。Code一般是C/C或者…

热插拔服务器电源维修,无需关停系统即可热插拔,TE Connectivity推出滑轨电源连接器...

原标题:无需关停系统即可热插拔,TE Connectivity推出滑轨电源连接器全球连接与传感器领域领军企业TE Connectivity(TE)宣布推出滑轨电源连接器。此连接器是唯一一款无需关闭系统电源,即可在服务器中进行电子元件热插拔的电源连接器产品。滑轨…

EMACS 中文显示为方框

解决方案 (set-default-font "Consolas-14") (set-fontset-font "fontset-default" unicode ("微软雅黑" . "unicode-bmp")) 转载于:https://www.cnblogs.com/Mingxx/archive/2013/01/11/2856432.html

计算机视觉领域的一些牛人博客,研究机构等的网站链接

计算机视觉领域的一些牛人博客,研究机构等的网站链接 zouxy09qq.com http://blog.csdn.net/zouxy09 转自:http://www.cnblogs.com/Rick-w/archive/2012/04/14/2446921.html 以下链接是本人整理的关于计算机视觉(ComputerVision, CV&#xff0…

excel服务器2010网站,excel服务器2010

excel服务器2010 内容精选换一换所有弹性伸缩的接口,有自定义错误信息返回,该小节介绍弹性伸缩的错误码的含义。{"error":{"code":"AS.0001","message":"System error."}}当您调用API时,如…

typeorm 生成实体类_android常用orm框架greenDAO创建表生成实体类

package com.example.greendao_test.DB_Initialize;import java.io.IOException;import de.greenrobot.daogenerator.DaoGenerator;import de.greenrobot.daogenerator.Entity;import de.greenrobot.daogenerator.Schema;/** * 生产类执行程序(建表和生成关系类) * * author a…

图像处理和计算机视觉中的经典论文

图像处理和计算机视觉中的经典论文 zouxy09qq.com http://blog.csdn.net/zouxy09 转自:http://www.cnblogs.com/moondark/archive/2012/04/20/2459594.html 感谢水木上同领域的同学分享,有了他的整理,让我很方便的获得了CV方面相关的经典论文…

Android系统架构

Android系统架构总体可分为四层结构,从下往上依次是:Linux内核层、系统运行库层、应用程序框架层以及应用程序层。如下图所示: 一、Linux内核层 Google选择了Linux内核作为Android的底层支撑系统。当前的Android系统是基于Linux2.6内核的,提供…

门禁系统服务器 控制器 读卡器,你知道门禁系统读卡器分为多少种吗?

门禁系统用的非接触IC 卡( 感应式 IC 卡 ) 读卡器是门禁系统的重要组成部分 , 是门禁系统信号输入的关键设备 , 关系着整个门禁系统的稳定性 。读卡器以固定频率向外发出电磁波,频率一般是13.56MHZ,当感应卡进入读卡器电磁波辐射范围内时,会触…

mounted钩子函数_Vue 探索之路——生命周期和钩子函数的一些理解

对于执行顺序和什么时候&#xff0c;下面我们将结合代码去看看钩子函数的执行<!DOCTYPE html> <html> <head><title></title><script type"text/javascript" src"https://cdn.jsdelivr.net/vue/2.1.3/vue.js"></sc…

梯度化一张图片

最近刚好学习到梯度方面的知识&#xff0c;所以上网查找了下关于梯度化一副图片的opencv代码&#xff0c;参考代码出自http://www.cnblogs.com/gnuhpc/archive/2012/06/28/2568755.html #include<stdio.h> #include<cv.h> #include<highgui.h> #include<m…

Overlay Surfaces (覆盖表面)

覆盖表面&#xff08;Overlay Surfaces&#xff09; 覆盖表面是具有特殊硬件支持能力的表面&#xff0c;通常用于显示活动视频、录制视频或静止位图而不需要位块传输到主表面或改变主表面的内容。对覆盖表面的字此完全由硬件提供&#xff0c;DirectDraw支持显示设备驱动程序…

逃跑吧少年服务器临时维护中,逃跑吧少年—逃跑吧少年5月30日更新 主动技能解锁...

逃跑吧少年—逃跑吧少年5月30日更新 主动技能解锁发表时间&#xff1a; 2019-05-31 作者&#xff1a;7k7k电脑版《逃跑吧&#xff01;少年》服务器将于5月30日9:00-11:00进行服务器维护工作&#xff01;请少年们安排好游戏时间&#xff0c;在维护前下线&#xff0c;以免造成…