Mat ,IplImage, CvMat 之间的转换的总结
在新版本与旧版本之间纠结,到底是用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 之间的转换的总结的更多相关文章
- Mat, IplImage, CvMat, Cvarr关系及元素获取
自己目前正打算整理opencv数据结构之间关系,寻寻觅觅之间,发现这篇博文很全面,总结得很好,故转之.红色部分不对,自己已修改! 原文地址:http://blog.csdn.net/abcjennif ...
- OpenCV图片类cv::Mat和QImage之间进行转换(好多相关文章)
在使用Qt和OpenCV混合编程时,我们有时需要在两种图片类cv::Mat和QImage之间进行转换,下面的代码参考了网上这个帖子: //##### cv::Mat ---> QImage ## ...
- OpenCV——Mat,IplImage,CvMat类型转换
Mat,cvMat和IplImage这三种类型都可以代表和显示图像,三者区别如下 Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化. 而CvMat和IplImage类型更侧 ...
- mat 和IPIImage之间的转换
opencv2.3.1 Mat::operator IplImageCreates the IplImage header for the matrix.C++: Mat::operator IplI ...
- OpenCV Mat与UIImage之间的转换
UIImage 转 OpenCV cvMat: - (cv::Mat)cvMatWithImage:(UIImage *)image { CGColorSpaceRef colorSpace = CG ...
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- CvMat、Mat、IplImage之间的转换详解及实例
见原博客:http://blog.sina.com.cn/s/blog_74a459380101obhm.html OpenCV学习之CvMat的用法详解及实例 CvMat是OpenCV比较基础的函数 ...
- CvArr、Mat、CvMat、IplImage、BYTE转换
一.Mat类型:矩阵类型,Matrix. 在openCV中.Mat是一个多维的密集数据数组. 能够用来处理向量和矩阵.图像.直方图等等常见的多维数据. Mat有3个重要的方法: ...
- 图像处理之opencv---mat、cvmat、IplImage之间的转换
一.Mat类型:矩阵类型,Matrix. 在openCV中,Mat是一个多维的密集数据数组.可以用来处理向量和矩阵.图像.直方图等等常见的多维数据. Mat有3个重要的方法: 1.Mat mat = ...
随机推荐
- gearman mysql持久化
gearman 创建Mysql持久化队列的方式如下: 启动gearman,命令如下: gearmand命令: -b, –backlog=BACKLOG 连接请求队列的最大值 -d, –daemon D ...
- celery的安装和使用
celery是python开发的分布式任务调度模块,接口简单,开发容易,五分钟就写出一个异步发送邮件的服务,celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,celery支持的消息服 ...
- HASH、HASH函数、HASH算法的通俗理解
之前经常遇到hash函数或者经常用到hash函数,但是hash到底是什么?或者hash函数到底是什么?却很少去考虑.最近同学去面试被问到这个问题,自己看文章也看到hash的问题.遂较为细致的追究了一番 ...
- HashMap,LinkedHashMap和TreeMap的区别
Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复会覆盖),但允许值重复. 1. HashMap Hashmap是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获 ...
- linux usb简介
参考书:<linux device drivers>.<usb 2.0规范> <usb3.1规范><usb白皮书> 以linux为例来说明usb系统. ...
- 分布式技术 memcached
memcached 是一个高性能的分布式内存对象缓存系统,用于动态web应用,以减轻数据库负载,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.memcache ...
- Windows 配置Apache以便在浏览器中运行Python script的CGI模式
打开httpd.conf,找到”#ScriptInterpreterSource Registry “,移除前面的注释# (如果找不到这行,就自己添加进去) 找到“Options Indexes Fo ...
- css 单行和多行文本溢出显示省略号
如果实现单行文本的溢出显示省略号同学们应该都知道用text-overflow:ellipsis属性来,当然还需要加宽度width属来兼容部分浏览. 实现方法: overflow: hidden; te ...
- PHP中preg_match正则匹配的/u /i /s是什么意思
/u 表示按unicode(utf-8)匹配(主要针对多字节比如汉字) /i 表示不区分大小写(如果表达式里面有 a, 那么 A 也是匹配对象) /s 表示将字符串视为单行来匹配
- redis.h
[对象] typedef struct redisObject { unsigned type:4;[REDIS_STRING,REDIS_LIST, HASH, SET, ZSET] ...