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

Mat类型较CvMat和IplImage有更强的矩阵运算能力,支持常见的矩阵运算(参照Matlab中的各种矩阵运算),所以将IplImage类型和CvMat类型转换为Mat类型更易于数据处理

Mat类型可用于直接存储图像信息,通过函数imread、imwrite、imshow等实现(与Matlab中的函数相似)。Mat是opencv2.0推出的处理图像的新的数据结构,现在越来越有趋势取代之前的cvMat和lplImage,相比之下Mat最大的好处就是能够更加方便的进行内存管理,不再需要程序员手动管理内存的释放。

1、将IplImage类型转换到Mat类型

Mat::Mat(const IplImage* img, bool copyData=false);

默认情况下,新的Mat类型与原来的IplImage类型共享图像数据,转换只是创建一个Mat矩阵头。当将参数copyData设为true后,就会复制整个图像数据。

IplImage -> Mat
Mat::Mat(const IplImage* img, bool copyData=false);/*default copyData=false,与原来的IplImage共享数据,只是创建一个矩阵头*/
例子:
IplImage* iplImg = cvLoadImage("greatwave.jpg", 1);
Mat mtx(iplImg); /* IplImage * -> Mat,共享数据; or : Mat mtx = iplImg;*/

2、将Mat类型转换到IplImage类型

Mat -> IplImage
Mat M
IplImage iplimage = M; /*只创建图像头,不复制数据*/

3、将CvMat类型转换为Mat类型

CvMat -> Mat
Mat::Mat(const CvMat* m, bool copyData=false); /*类似IplImage -> Mat,可选择是否复制数据*/

4、将Mat类型转换为CvMat类型

Mat -> CvMat
例子(假设Mat类型的imgMat图像数据存在):
CvMat cvMat = imgMat;/*Mat -> CvMat, 类似转换到IplImage,不复制数据只创建矩阵头

opencv中Mat与IplImage,CVMat类型之间转换相关推荐

  1. C++下的OpenCV中Mat类型存储的图像格式

    在调用CV进行图像处理时,经常涉及图像格式转换,经常出现原始图像输入后CV_32F与ushort之间的数据差异导致程序报错,可使用std::cout << "dilated_ty ...

  2. Opencv中Mat的data数据只定义为uchar*类型,

    opencv中Mat的数据定义为指向uchar 的指针,而构造函数又提供了许多其他类型. 其实数据在内存中是一维存储的,而图像基本结构是二维的,3D图像还会是三维的:同时,彩色图像还有多个channe ...

  3. OpenCV中Mat的属性

    OpenCV中Mat的属性 最近在做一OpenCV的图像轮廓检验,但当用到霍夫变换时才发现对Mat的属性了解不足.Mat在OpenCV中的地位是及其重要的,因此有必要做一个总结. 大体上来说,Mat是 ...

  4. opencv中Mat究竟是什么?

    opencv中Mat究竟是什么?(试着运行一下两个代码) 首先看opencv是怎么显示一张图的 : //#include "stdafx.h"#include <opencv ...

  5. OpenCV中的图像处理 —— 图像阈值+图像平滑+形态转换

    OpenCV中的图像处理 -- 图像阈值+图像平滑+形态转换 目录 OpenCV中的图像处理 -- 图像阈值+图像平滑+形态转换 1. 图像阈值 1.1 简单阈值 1.2 自适应阈值 1.3 Otsu ...

  6. Linq--使用Linq在不同类型之间转换

    需求: 有两个类型,分别为MyUser和YourUser,要在这两个类型之间进行转换 MyUser.cs namespace XMLSpy.Linq{     public class MyUser{ ...

  7. java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  8. java中byte数组与int类型的转换(两种方式)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  9. Go : 类型之间转换数字的测试(附完整源码)

    Go : 类型之间转换数字的测试 package main var i8 int8; var u8 uint8; var i16 int16; var u16 uint16; var i32 int3 ...

最新文章

  1. JavaEE 要懂的小事:二、图解 Cookie(小甜饼)
  2. 【Android应用开发】 Universal Image Loader ( 使用简介 | 示例代码解析 )
  3. 人还是很需要成就感的
  4. 苹果复兴_类型复兴的故事:来自Type West的经验教训
  5. python 常用 time, datetime处理
  6. SpringBoot-异常处理
  7. jQuery学习笔记(五)
  8. python控制键盘游戏内无效_关于python的游戏《兔子和獾》代码写到用键盘输入WASD控制兔子移动时,兔子移动不了。但是。。。...
  9. matlab离散信号幅频相频特性,信号幅频相频特性画法(频率响应法).pdf
  10. JavaScript的js文件压缩和格式化工具
  11. tolua unity 报错_Unity手游开发札记——ToLua#集成内存泄露检查和性能检测工具
  12. ubuntu查看磁盘分区使用情况命令df
  13. PTA L1-087(C++) 机工士姆斯塔迪奥
  14. Dubbo之@Adaptive
  15. 联想z5 Android 9.0,联想Z5开启Android 9.0内测,新增人脸识别!
  16. 不上架App Store怎么安装到非越狱苹果手机使用
  17. 14015problem I 方案数
  18. 【Python】批量修改照片日期和文件名
  19. 2021 || You Cannot Easily Catch Me: A Low-Detectable Adversarial Patch for Object Detectors
  20. EOJ.Weights

热门文章

  1. 机器学习预测信贷风险
  2. java树洞_SSM框架开发案例——铁大树洞后台管理系统
  3. 内存管理单元MMU简介
  4. golang开发效率神器汇总
  5. gRPC基础--Protobuf编码格式详解
  6. Script 入门实践
  7. CTF之文件包含的猥琐思路
  8. canvas的基本应用
  9. 迭代器——STL关键所在
  10. (笔试题)滑动窗口的最大值