USEGEAR

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

openc下cv::Mat和IplImage的相互转换

opencv2.0的类CV::Mat和opencv1.0的IplImage之间烦人转换:

复制代码
cv::Mat matimg = cv::imread ("girl.jpg");

IplImage* iplimg;

*iplimg = IplImage(matimg);

 

IplImage* iplimg = cvLoadImage("girl.jpg");

cv::Mat matimg;

matimg = cv::Mat(iplimg);
复制代码

 

实际上尽量用2.0,因为opencv2.0是用c++写的很棒,没有指针问题一说。c的指针要自己小心小心噢。

MatMat 与 IplImage 和  CvMat 的转换:
在 OpenCV 2 中虽然引入了方便的 , 出于兼容性的考虑, OpenCV依然是支持C语言接口的IplImage和CvMat结构。如果你要与以前的代码兼容, 将会涉及 MatMatMat与 IplImage和 CvMat的转换。

 Mat转为IplImage和CvMat格式:

  Mat img(Size(320,240),CV_8UC3);
  ......
  IplImage iplimg = img;//转为IplImage结构

如何要转成CvMat类型:
    CvMat cvimg =img;//转为CvMat

 

需要注意的是,类型转换后IplImage和CvMat、Mat共用一个矩阵数据。IplImage和CvMat没有计数功能,img数据释放,那么IplImage和CvMat也就失去数据了。

IplImage和CvMat格式转为Mat

Mat有二个构造函数,可以实现iplimage和CvMat到Mat的转换。这两个函数都有一参copyData。如果copyData的值是 false,那么MatMatMat将与IplImage或CvMat共用同一矩阵数据;如果值是true,Mat会新申请内存,然后将会新申请内存,然后将 IplImage或 CvMatCvMat CvMat的数据复制到 Mat的数据区。

如果共用数据,Mat也将不会使用引计数来管理内存,需要开发者 不会使用引计数来管理内存。建议做此转换是将参数置为true,这样内存管理变得简单 。

Mat::Mat(const Cvmat *m,bool copyData=false)
Mat::Mat(const IplImage *img,bool copyData=false)
===================
ImlImage *iplimg = cvLoadImage("girl.jpg");
Mat im(iplimg,true);

 

 

 

 

posted on   USEGEAR  阅读(5791)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示