第一篇:在opencv3.0中,Mat与iplimage转换

初学opencv3.0版本,在学习的过程中遇到了需要将Mat与Iplimage之间混合使用,所以需要对其进行转换

第一种方法:

Mat image;

Iplimage  a;

a=image;

使用的时候image可以自己加载或者创造,对于a,需要取地址:&a

例如:

 cvCvtColor( const CvArr* src, CvArr* dst, int code );

正常情况下,我们定义iplimage* src;直接在函数里调用就可以了,一般我们定义了Mat类型的图像,在使用的时候,不需要手动释放,碰到这样需要调用指针的形参时,就需要在这里进行一个转换,方便使用,不使用需要释放内存的iplimage,避免忘记释放内存,导致内存泄露

该函数的前两个参数是指针,在需要对a进行转化的时候要,需要这样写:

 cvCvtColor( &a, &a, code );

第二种方法:

Iplimage* image=cvLoadImage(“c\\img.jpg”);

Mat image1(iplImage,false);


后来发现官方给的转换函数,非常的方便,也给补上

我把这种方法定义为:

第三种方法:cvMat与Mat之间的转换

安装了OpenCV3.0.0之后,发现无法用网上盛传的方法的方法来将 IplImage* 转换为Mat格式了

而且编译的时候提示没有对应的函数.

然后查了一下源文件mat.h,果然已经没有了

Mat::Mat(const IplImage* img, bool copyData=false);
原来是官方在3.0.0版本去掉了这个函数.

百度一圈也没有解决办法(唉,尝鲜是要付出代价的啊)

不过好在在OpenCV官方论坛发现了大神的解决办法,贴出来,让大家少走弯路

 IplImage * ipl = ...;
 cv::Mat m = cv::cvarrToMat(ipl);  // default additional arguments: don't copy data.
  
  
  • 1
  • 2
同样,依旧只拷贝信息头,用的同一个数据块

查了一下源代码头文件,是酱紫滴

//! converts array (CvMat or IplImage) to cv::Mat
CV_EXPORTS Mat cvarrToMat(const CvArr* arr, bool copyData=false,
                          bool allowND=true, int coiMode=0,
                          AutoBuffer<double>* buf=0);

原来新版本的这个函数同样还支持CvMat到Mat的转换,真是太方便了!






评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值