历史版本的opencv中使用cvmat储存数据,使用iplimage存储图像,是基于C的数据存储结构

之后的opencv2.x出现mat类型,不用手动管理内存,相比cvmat和iplimage更加方便,这里主要介绍mat和其二者的转换关系

cvmat 和 iplimage派生于同一个基类cvarr,所以其二者到mat有相同的转换方式

iplimage->mat
IplImage* frame = cvCreateImage(cvSize(640,480),IPL_DEPTH_8U,1); //浅拷贝 cv::Mat
m = cv::cvarrToMat(frame) //深拷贝 copydata设置为true cv::Mat m =
cv::cvarrToMat(frame, true);
或直接用构造函数
IplImage* src = cvLoadImage("xx.jpg"); //浅拷贝 Mat M(src); Mat M(src, false);
Mat M = src; //深拷贝 Mat M(src, true);
cvmat->mat
CvMat* frame = cvCreateMat(3, 3, CV_32FC1); //浅拷贝 cv::Mat m =
cv::cvarrToMat(frame) //深拷贝 copydata设置为true cv::Mat m = cv::cvarrToMat(frame,
true);
反过来,由mat到iplimage和cvmat的转换

mat->iplimage
Mat src = imread("x.jpg"); IplImage* m = &IplImage(src); //深拷贝使用clone复制数据
IplImage *m = cvCloneImage(m);
mat->cvmat

opencv 2.x 可以直接赋值使用
Mat src = ...; CvMat dst = img;
而在更高版本3.x 使用cvmat的构造函数即可
Mat src = ...; CvMat dst(img);

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信