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

来源:互联网 发布:mac os 10.13iso镜像 编辑:程序博客网 时间:2024/06/09 20:59

《OpenCV》入门教程:

3.11 Mat IplImageCvMat 的转换
OpenCV 2中虽然引入了方便的 Mat类, 出于兼容性的考虑, OpenCV
然是支持
C 语言接口的IplImage CvMat 结构。如果你要与以前的代码兼容,
将会涉及
Mat IplImage CvMat 的转换。
3.11.1Mat 转为 IplImage CvMat格式
假如你有一个以前写的函数,函数的定义为:
void mycvOldFunc(IplImage * p, ...);
函数的参数需要 IplImage类型的指针。 Mat转为 IplImage,可以用简单的等
号赋值操作来进行类型转换,这样实现:
Mat img(Size(320, 240), CV_8UC3);
...
IplImage iplimg = img; //
转为IplImage 结构
mycvOldFunc( & iplimg, ...);//iplimg 取地址
如果要转为 CvMat类型,操作类似:
CvMat cvimg = img; //转为CvMat 结构
需要特别注意的是,类型转换后, IplImageCvMatMat共用同一矩阵数
据,而
IplImage CvMat 没有引用计数功能,如果上例中的img 中数据被释放,
iplimg cvimg 也就失去了数据。 因此要牢记不可将Mat 对象提前释放。
3.11.2IplImage CvMat 格式转为 Mat
Mat 类有两个构造函数,可以实现IplImage CvMat Mat 的转换。这两
个函数都有一个参数
copyData。如果copyData的值是false,那么Mat将与IplImage
CvMat共用同一矩阵数据;如果值是 trueMat 会新申请内存,然后将IplImage
CvMat的数据复制到 Mat的数据区。
43
如果共用数据, Mat也将不会使用引用计数来管理内存,需要开发者自己来
管理。本书建议做此转换是将参数置为
true,这样内存管理变得简单。
Mat::Mat(const CvMat* m, bool copyData=false)
Mat::Mat(const IplImage* img, bool copyData=false)
例子代码如下:
IplImage * iplimg = cvLoadImage("lena.jpg");
Mat im(iplimg, true);
 





阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宠妻101式老公求轻吻 快穿病娇宿主求轻宠 怎么求逆矩阵 分块矩阵求逆公式图片 求逆矩阵方法 求矩阵逆 求矩阵的逆 如何求逆矩阵 分块矩阵求逆 3x3矩阵怎么求逆矩阵 求逆矩阵的方法 矩阵a的逆矩阵怎么求 伴随矩阵求逆矩阵公式 求伴随矩阵的逆矩阵 求逆矩阵的简便方法 如何求逆矩阵公式 逆矩阵的求法例题 求逆矩阵的算法 三阶矩阵求逆 fortran矩阵求逆 分块矩阵求逆的6个基本公式 如何求矩阵的逆矩阵 逆矩阵的求法 矩阵求逆方法 3x3矩阵的逆矩阵怎么求 三阶矩阵求逆矩阵公式 matlab求矩阵的逆 vb求逆矩阵 伴随矩阵法求逆矩阵 行列式的逆矩阵怎么求 矩阵求逆算法 求道玉 玉道 鸣人的求道玉怎么没了 求道玉用一个少一个吗 西玉道网络111 玉镯子磕出一道裂纹怎么修复 释灵阴阳录 盘子女人坊释灵 古董求鉴定 小组鉴定