Mat CvMat IplImage类型转化

CvArr, CvMat, IplImage, cv::Mat, cv::InputArray 一. OpenCV中的 CvArr, CvMat, IplImage, cv::Mat, cv::InputArray 1.1 看继承关系 typedef void CvArr; class Mat; struct CvMat struct IplImage; // Proxy datatype for passing Mat's and vector<>'s as input 阅读详情
一、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对其中的图像操作(缩放、单通道提取、图像阈值操作等)进行了优化。

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

            CvArr用作函数的参数,无论传入的是CvMat或IplImage,内部都是按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是不複製影像,也就是pImg與img的data共用同個記憶體位置,header各自有
B.IplImage -> CvMat

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

法2:CvMat *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。

OpenCV中:CvArr、CvMat、IplImage、cv::Mat和cv::InputArray的相关总结 1.CvArr* : typedef void CvArr;        可以认为CvArr*是一个万能指针,例如某个函数参数是CvArr*,该函数内部会强制转换回该函数需要的数据类型,所以在调用该函数时,传入的参数类型就必须与该函数要求的类型一致,否则就会出错。         2.cv::Mat:          我们可以认为cv::Mat类型把向量、矩阵、图像等都统一了操作 阅读详情

相关推荐

Opencv C++ Mat转为bytes python bytes转为图片

Opencv C++ 图片转换为 Bytes list mat ==> byte 列表 // mat ==> bytes byte* matToBytes(Mat image) { // 图片大小 int size = image.total() * image.elemSize(); byte* bytes = new byte[size]; // 需要使用 delete[] 删除 // 拷贝图片数据 std::memcpy(bytes, image.data, size * si

廷益_飞鸟的博客 1293

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

一、Mat类型:矩阵类型,Matrix。     在openCV中,Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。     Mat有3个重要的方法:          1、Mat mat = imread(const String* filename);            读取图像          2、imshow(const strin

逍遥.安——于安静和黑暗中寻找最亮丽的风景 8万+

5分钟搞定kkFileView 4.4.0 Docker部署:小白也能上手的完整配置流程

本文提供了一份针对kkFileView 4.4.0版本的Docker部署完整指南。通过使用预构建的Docker镜像,即使是新手也能在5分钟内完成文件预览服务的搭建,涵盖从环境准备、镜像拉取、容器启动到服务验证的全流程,并分享了进阶配置与生产环境优化建议。

mango的博客 524

OpenCV里的CvArr, CvMat, IplImag

OpenCV里定义了几种关于图像的数据类型,特别是常见的

Crossi的专栏 1866

【GNSS测试技术(一)】GNSS基础原理介绍

GNSS(全球卫星导航系统)是一种基于卫星信号的定位技术,通过使用分布在地球轨道上的卫星,为用户提供全球范围内的定位、导航和授时服务。

新猿异码的博客 5751

A2B音频总线在智能座舱中的应用

车载A2B链路音频是智能座舱的核心功能,涵盖车载音响、语音识别、e-Call、消噪及回声消除等应用,随着汽车智能网联化的发展,对音频的开发要求也越来越高,需要加入更先进、功能丰富的信息娱乐功能以满足消费者的用户体验。但传统的模拟并行音频信号传输方式,难以在功能增加与整车轻量化(线缆的重量及成本减少)之间取得均衡。这时候就需要A2B音频总线了。A2B音频总线用于连接车辆中的音频设备,如麦克风(MIC)、功放(AMP)、多媒体主机(Head Unit)和T-BOX等。通过一条低成本的非屏蔽双绞线UTP,进行跨距

怿星科技的博客 3934

矩阵和图像类型(Mat; CvMat; IplImage 的相互转化)

在开始学习OpenCV的矩阵和图像类型之前,我们需要知道 两件事情: 在OpenCV中没有向量(vector)结构,任何时候需要向量,都只需要一个列矩阵(如果需要一个转置或共轭向量,则需要一个行矩阵); OpenCV矩阵的概念与我们在线性代数课上学习的概念相比,更抽象,尤其是矩阵的元素,并非只能取简单的数值类型,可以是多通道的值。 CvArr; CvMat; IplImage 的关系: I...

重点记录机器人和自动驾驶相关领域的技术,尤其是计算机视觉,视觉SLAM等,不仅有前言文献或必备算法的学习,也会有实际应用的点滴经验 786

保姆级教程:在SIwave 2024 R2中搞定TDR仿真,手把手教你分析USB 3.0差分线阻抗

本文提供了一份详细的SIwave 2024 R2 TDR仿真教程,重点讲解如何分析USB 3.0差分线阻抗。从项目准备、参数配置到结果分析,逐步指导工程师完成完整的仿真流程,并分享实战经验和高级技巧,帮助提升信号完整性分析能力。

weixin_33670786的博客 494

opencv中的矩阵解释,包括CvMat IplImage 、MAT 类型之间的转化

真实世界中获取数字图像有很多方法,比如数码相机、扫描仪、CT或者磁共振成像。无论哪种方法,我们(人类)看到的是图像,而让数字设备来“看“的时候,则是在记录图像中的每一个点的数值。图像,在标出的镜子区域中你见到的只是一个矩阵,该矩阵包含了所有像素点的强度值。如何获取并存储这些像素值由我们的需求而定,最终在计算机世界里所有图像都可以简化为数值矩以及矩阵信息。 IplImage   Ip

图像处理的专栏 1445

OpenCASCADE:Direct3D CSharp 示例

OpenCASCADE:Direct3D CSharp 示例OpenCASCADE:Direct3D CSharp 示例 OpenCASCADE:Direct3D CSharp 示例 此示例演示了如何在使用CSharp和Windows Presentation Foundation (WPF)编写的.Net应用程序中使用 OCCT 和 DirectX 库。 .Net、OCCT (C++) 和 DirectX 级别之间的连接由用 C++/CLI 编写的代理库OCCProxy和D3DProxy提供。代理库OCC

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1824

如何从 VMware 官网下载最新版本的 VMware Workstation

如何从 VMware 官网下载 VMware Workstation

XiaoqiangClub的博客 5887

AI人工智能与数据挖掘的技术融合趋势

我们的目的是搞清楚AI人工智能和数据挖掘是怎么融合在一起的,以及这种融合未来会有什么样的发展趋势。范围涵盖了这两种技术融合的原理、应用场景,还有未来可能面临的挑战。我们会先讲讲AI人工智能和数据挖掘是什么,它们之间有什么关系。然后说说它们融合的算法原理、数学模型。接着通过一个实际的项目案例,看看它们是怎么在实际中运用的。还会介绍一些它们的应用场景和相关工具。最后分析一下未来的发展趋势和挑战,并且总结学到的知识,提出一些思考题让大家思考。AI人工智能。

AI 领航者的博客 1367

OpenCV中IplImage* ,CvMat 与新版OpenCV中 Mat类型的相互转化

IplImage -> cv::Mat Ex.  IplImage* pImg = cvLoadImage("lena.jpg"); cv::Mat img(pImg,0); //0是不复制影像,也就是pImg与img的data共用同个记忆体位置,header各自有

lingtianyulong的专栏 1675

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【opencv 官方教程】后续1 关于Mat CvMat IplImage

今天根据网友的示例程序,想做一个能显示摄像头fps的实时画面。大概就像下面这个图 结果发现了和官方(opencv 3.2)中完全不相同的类型 IplImage,而且用的是指针(难道还要动态管理内存么)。 这一下把我愁坏了,因为前面的介绍只有Mat类型而非CvMat 或是IplImage,至于CvArr根本就不知道是什么。 好在有网友的总结,让我在多次尝试未果之后终于放弃了使用官方教程的做

a576742110的博客 571

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

一些关于Mat,IplImage*的理解和转换的博客列表

Mat和IPLimage的理解转换

probie的博客 1514

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

opencv类型转换

转:https://www.cnblogs.com/Key-Ky/p/4150531.html 1、CvMat之间的复制 //注意:深拷贝 - 单独分配空间,两者相互独立 CvMat* a; CvMat* b = cvCloneMat(a); //copy a to b 2、Mat之间的复制 //注意:浅拷贝 - 不复制数据只创建矩阵头,数据共享(更改a,b,c的...

OnTheWaykd的博客 310

CvMat,Mat和IplImage之间的转化和拷贝

在OpenCV中Mat、CvMat和IplImage类型都可以代表和显示图像。IplImage由CvMat派生,而CvMat由CvArr派生即CvArr -> CvMat -> IplImage,Mat类型则是C++版本的矩阵类型(CvArr用作函数的参数,无论传入的是CvMat或IplImage,内部都是按CvMat处理)。 其中Mat类型侧重于计算,数学性较高,OpenCV对Mat类型的计算

望都者 1134

在vivado里用rtl描述_使用Vivado HLS实现OpenCV的开发流程 | 学步园

本文通过对OpenCV中图像类型和函数处理方法的介绍,通过设计实例描述在vivadoHLS中调用OpenCV库函数实现图像处理的几个基本步骤,完成从OpenCV设计到RTL转换综合的开发流程。开源计算机视觉 (OpenCV) 被广泛用于开发计算机视觉应用,它包含2500多个优化的视频函数的函数库并且专门针对台式机处理器和GPU进行优化。OpenCV的用户成千上万,OpenCV的设计无需修改即可在 ...

weixin_30653755的博客 860

OpenCV中Mat与IplImage和CvMat类型之间的相互转换

OpenCV中Mat与IplImage和CvMat类型之间的相互转换   转载自:http://blog.youkuaiyun.com/wangwanguo08/article/details/7775301  Mat类型较CvMat和IplImage有更强的矩阵运算能力,支持常见的矩阵运算(参照Matlab中的各种矩阵运算),所以将IplImage类型和CvMat类型转换为M

知行且执行 819

openCV中cvMat 、Mat 、IplImage数据类型之间的转换

1、CvMat之间的复制//注意:深拷贝 - 单独分配空间,两者相互独立 CvMat* a; CvMat* b = cvCloneMat(a); //copy a to b 2、Mat之间的复制//注意:浅拷贝 - 不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用) Mat a; Mat b = a; //a "copy" to b Mat c...

PtaQ的博客 707

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

因为之前查资料关于opencv几种坑爹类型CvMat, Mat, IplImage, Cvarr的详细讲解很多,但详细到多通道元素获取和涉及到类型转换的文章极少,还有更坑爹的一些误导文章,所以本文很简要地讲一下怎样获取这几种类型的元素,及其类型转换。

Rachel Zhang的专栏 1万+

CvMat、Mat、IplImage之间的转换

CvMat、Mat、IplImage之间的转换

沐凡星的博客 3516

Mat、CvMat、IplImage类型浅析

OpenCV中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage。   一、Mat类型:矩阵类型,Matrix。        在openCV中,Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。        Mat有3个重要的方法:          1、Mat mat = imread(const String* filena

Jfuck的专栏 1203
上一篇: opencv 基础结构Iplimage cvMat Mat
下一篇: PCA-主成分分析
dingfc
博客等级 码龄17年 4粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值