【计算机视觉】【图像处理】【VS开发】【Qt开发】opencv之深拷贝及浅拷贝,IplImage装换为Mat
2016-09-08 11:03
447 查看
原文:opencv之深拷贝及浅拷贝,IplImage装换为Mat
一、(1) 浅拷贝:
Mat B;
B = image // 第一种方式
Mat C(image); // 第二种方式
这两种方式称为浅copy,是由于它们有不同的矩阵头,但是它们共享内存空间,即指向一个矩阵。当图像矩阵发生变化时,两者相关联,都会变化。
(2)深拷贝
Mat B,C;
B = image.clone(); // 第一种方式
image.copyTo(C); // 第二种方式
深拷贝是真正的copy了一个新的图像矩阵,此时image,B,C三者相互没有影响。
二、IplImage装换为Mat
此时需要注意释放iplImage结构指向的内存时必须 调用函数: cvReleaseImage(&iplImage);
当然opencv提供了另外一种指针类,无需手动释放,但现在已经不用了,可以使用它来封装IplImage指针:
Ptr iplImage = cvLoadImage(“E:\song.jpg”,1);
应该尽量避免使用这个废弃的数据结构,而是使用cv::Mat。
一、(1) 浅拷贝:
Mat B;
B = image // 第一种方式
Mat C(image); // 第二种方式
这两种方式称为浅copy,是由于它们有不同的矩阵头,但是它们共享内存空间,即指向一个矩阵。当图像矩阵发生变化时,两者相关联,都会变化。
(2)深拷贝
Mat B,C;
B = image.clone(); // 第一种方式
image.copyTo(C); // 第二种方式
深拷贝是真正的copy了一个新的图像矩阵,此时image,B,C三者相互没有影响。
二、IplImage装换为Mat
IplImage* iplImage = cvLoadImage("E:\song.jpg",1); cv::Mat image2(iplImage,false); //其中false为浅拷贝,而true为深拷贝,默认为false。IplImage 和image2共享同一份图像数据。
此时需要注意释放iplImage结构指向的内存时必须 调用函数: cvReleaseImage(&iplImage);
当然opencv提供了另外一种指针类,无需手动释放,但现在已经不用了,可以使用它来封装IplImage指针:
Ptr iplImage = cvLoadImage(“E:\song.jpg”,1);
应该尽量避免使用这个废弃的数据结构,而是使用cv::Mat。
相关文章推荐
- OpenCV2 图像处理与计算机视觉(一)—— 去除一幅二值化图像中的椒盐噪声
- 【VS开发】【计算机视觉】OpenCV读写xml文件《C版本》
- [vs+qt+opencv]手把手做GUI图像采集及处理UI交互界面
- 《opencv3编程入门》之一:图像处理、计算机视觉与opencv
- OpenCV3计算机视觉Python语言实现(三):使用OpenCV3处理图像
- 计算机视觉之OpenCV教程 --- Mat图像类基础(二)
- 计算机视觉与图像处理(一)——卷积与opencv
- 【VS开发】【计算机视觉】OpenCV读写xml文件《C++版本》
- 图像处理之opencv---mat、cvmat、IplImage之间的转换
- javaCV图像处理之Frame、Mat和IplImage三者相互转换(使用openCV进行Mat和IplImage转换)
- 计算机视觉与图像处理学习笔记(三)opencv的基本数据类型与简单图像处理函数
- 新手学习opencv,Mat和IplImage简单处理图像的效率
- OpenCV(三)回归计算机视觉,对图像平滑处理
- 【Qt开发】【计算机视觉】OpenCV在Qt-MinGw下的编译库
- 【OpenCV图像处理入门学习教程一】OpenCV2 + 3的安装教程与VS2013的开发环境配置 + JPEG压缩源码分析与取反运算修改
- VS+QT+OpenCV图像处理输出
- Qt 5.3 下OpenCV 2.4.11 开发(0)图像处理基本概念
- javaCV图像处理之Frame、Mat和IplImage三者相互转换(使用openCV进行Mat和IplImage转换)
- 【VS开发】【计算机视觉】使用opencv静态库编译程序时爆出错误的解决方案
- 3_opencv2计算机视觉学习_基于类的图像处理