ITKeyword,专注技术干货聚合推荐

注册 | 登录

cv::Mat与iplimage类型如何进行互相转换

b5w2p0 分享于 2013-04-26

推荐:【OpenCV】cv::Mat与IplImage类型转换

 IplImage->cv::Mat IplImage* pImg = cvLoadImage("lena.jpg");cv::Mat img(pImg,0); cv::Mat->IplImage IplImage* pImg = cvLoadImage("lena.jpg");cv::Ma

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
地址https://www.aliyun.com/minisite/goods

IplImage -> cv::Mat
IplImage* pImg = cvLoadImage("lena.jpg");
cv::Mat img(pImg,0);  // 0是不複製影像,也就是pImg與img的data共用同個記憶體位置,header各自有

 

cv::Mat -> IplImage
// converts header to IplImage; no data is copied
// operator IplImage() const; 
// img 是格式为cv::Mat的数据


IplImage pImg;
pImg = IplImage(img);  // 一樣檔案沒複製

CvMat 和 IplImage 的类型转换,也可以用 cvGetMat , cvGetImage 两个函数来实现。


Mat类型较CvMat和IplImage有更强的矩阵运算能力,支持常见的矩阵运算(参照Matlab中的各种矩阵运算),所以将IplImage类型和CvMat类型转换为Mat类型更易于数据处理。

Mat类型可用于直接存储图像信息,通过函数imread、imwrite、imshow等实现(与Matlab中的函数相似),似乎在某种程度上可以取代IplImage类型。

(1)将IplImage类型转换到Mat类型

Mat::Mat(const IplImage* img, bool copyData=false);

默认情况下,新的Mat类型与原来的IplImage类型共享图像数据,转换只是创建一个Mat矩阵头。当将参数copyData设为true后,就会复制整个图像数据。

例:

IplImage* iplImg = cvLoadImage("greatwave.jpg", 1);

推荐:opencv中Mat与IplImage,CVMat类型之间转换

在openCV中,Mat是一个多维的密集数据数组。可以用来处理向量和矩阵、图像、直方图等等常见的多维数据。 Mat有3个重要的方法: 1、Mat mat = imread(const Strin

Mat mtx(iplImg); // IplImage* ->Mat 共享数据

// or : Mat mtx = iplImg;

(2)将Mat类型转换到IplImage类型

同样只是创建图像头,而没有复制数据。

例:

IplImage ipl_img = img; // Mat -> IplImage

(3)将CvMat类型转换为Mat类型

与IplImage的转换类似,可以选择是否复制数据。

Mat::Mat(const CvMat* m, bool copyData=false);

(4)将Mat类型转换为CvMat类型

与IplImage的转换类似,不复制数据,只创建矩阵头。

例:

// 假设Mat类型的imgMat图像数据存在

CvMat cvMat = imgMat; // Mat -> CvMat


推荐:【OpenCV】OpenCV的类型转换问题(BYTE、IplImage、Mat等)

1、BYTE转IplImage(需要每行字节对齐) Mat中的图像数据是不对齐的,而IplImage中的图像数据是4字节对齐的, 所以在访问IplImage图像数据的时候,要特别注意wid

IplImage -> cv::Mat IplImage* pImg = cvLoadImage("lena.jpg"); cv::Mat img(pImg,0);  // 0是不複製影像,也就是pImg與img的data共用同個記憶體位置,header各自有   cv::Mat -> IplImage //

相关阅读排行


相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。