OpenCV 加载图像的两种接口
2017-05-18 15:40
162 查看
1、CvMat之间的复制
2、Mat之间的复制
3、CvMat转Mat
4、Mat转CvMat
==========IplImage与上述二者间的转化和拷贝===========
1、IplImage之间的复制
这个不赘述了,就是cvCopy与cvCloneImage使用区别,贴张网上的图:
2、IplImage转Mat
3、Mat转IplImage
4、IplImage转CvMat
5、CvMat转IplImage
//注意:深拷贝 - 单独分配空间,两者相互独立 CvMat* a; CvMat* b = cvCloneMat(a); //copy a to b
2、Mat之间的复制
//注意:浅拷贝 - 不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用) Mat a; Mat b = a; //a "copy" to b Mat c(a); //a "copy" to c //注意:深拷贝 Mat a; Mat b = a.clone(); //a copy to b Mat c; a.copyTo(c); //a copy to c
3、CvMat转Mat
//使用Mat的构造函数:Mat::Mat(const CvMat* m, bool copyData=false); 默认情况下copyData为false CvMat* a; //注意:以下三种效果一致,均为浅拷贝 Mat b(a); //a "copy" to b Mat b(a, false); //a "copy" to b Mat b = a; //a "copy" to b //注意:当将参数copyData设为true后,则为深拷贝(复制整个图像数据) Mat b = Mat(a, true); //a copy to b
4、Mat转CvMat
//注意:浅拷贝 Mat a; CvMat b = a; //a "copy" to b //注意:深拷贝 Mat a; CvMat *b; CvMat temp = a; //转化为CvMat类型,而不是复制数据 cvCopy(&temp, b); //真正复制数据 cvCopy使用前要先开辟内存空间
==========IplImage与上述二者间的转化和拷贝===========
1、IplImage之间的复制
这个不赘述了,就是cvCopy与cvCloneImage使用区别,贴张网上的图:
2、IplImage转Mat
//使用Mat的构造函数:Mat::Mat(const IplImage* img, bool copyData=false); 默认情况下copyData为false IplImage* srcImg = cvLoadImage("Lena.jpg"); //注意:以下三种效果一致,均为浅拷贝 Mat M(srcImg); Mat M(srcImg, false); Mat M = srcImg; //注意:当将参数copyData设为true后,则为深拷贝(复制整个图像数据) Mat M(srcImg, true);
3、Mat转IplImage
//注意:浅拷贝 - 同样只是创建图像头,而没有复制数据 Mat M; IplImage img = M; IplImage img = IplImage(M); //深拷贝 cv::Mat img2; IplImage imgTmp = img2; IplImage *input = cvCloneImage(&imgTmp);
4、IplImage转CvMat
//法一:cvGetMat函数 IplImage* img; CvMat temp; CvMat* mat = cvGetMat(img, &temp); //深拷贝 //法二:cvConvert函数 CvMat *mat = cvCreateMat(img->height, img->width, CV_64FC3); //注意height和width的顺序 cvConvert(img, mat); //深拷贝
5、CvMat转IplImage
//法一:cvGetImage函数 CvMat M; IplImage* img = cvCreateImageHeader(M.size(), M.depth(), M.channels()); cvGetImage(&M, img); //深拷贝:函数返回img //也可写成 CvMat M; IplImage* img = cvGetImage(&M, cvCreateImageHeader(M.size(), M.depth(), M.channels())); //法二:cvConvert函数 CvMat M; IplImage* img = cvCreateImage(M.size(), M.depth(), M.channels()); cvConvert(&M, img); //深拷贝
相关文章推荐
- opencv 实现加载并显示图像
- Opencv对加载图像时路径格式转换
- Python_opencv第一篇、图像加载与缩放
- openCV—Python(2)—— 加载、显示和保存图像
- python-opencv-matlab图像处理接口关系
- 【opencv】 改变图像的对比度和亮度的两种方法
- opencv把一个彩色图像加载成灰度图像
- OpenCV Using Python——加载和显示图像
- OpenCV学习C++接口:图像遍历+像素压缩
- Spring Boot启动之后,默认加载CommandLineRunner接口和注解两种方式PostContruct
- opencv学习(二)之图像的加载、显示、保存
- OpenCV图像的加载、显示、修改与保存
- Android-动态加载插件化的两种实现方式(二):接口
- OpenCV(C++接口)学习笔记2-像素级的图像操作
- OPENCV+MFC单文档显示图像的两种方法
- OpenCV--图像的加载、显示、修改与保存
- 【图像处理】Ubuntu安装OpenCV 3.0以及Python接口
- Opencv入门笔记一---从磁盘加载并显示图像
- [OpenCV]实验1.1:图像加载、显示
- opencv程序一:加载显示图像