OpenCV图像拷贝方法与注意点(=、copy、clone)
来源:互联网 发布:茶叶推广方案 知乎 编辑:程序博客网 时间:2024/06/01 08:52
下面介绍三种OpenCV复制图像的方法:
方法1、重载运算符=
使用重载运算符“=”进行的拷贝是一种浅拷贝,虽然它们有不同的矩阵头,但是二者共享相同的内存空间,二者内容相互关联,任何一个变量变化的同时另一个变量也随之改变。
/*OpenCV v1版本*/IplImage img_origin = cvLoadImage(".\\picture.jpg", CV_LOAD_IMAGE_COLOR); // 读取一张彩色图 IplImage img_copy = img_origin; // 直接赋值,浅拷贝/*OpenCV v2之后版本*/Mat img_origin = imread(picture, IMREAD_COLOR); // 读取一张彩色图 Mat img_copy = img_origin;
方法2、cvCopy
cvCopy的原型是:
void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask CV_DEFAULT(NULL) );
OpenCV官网关于cvCopy函数的介绍
在使用这个函数之前,必须先用cvCreateImage()一类的函数开辟一段内存,然后传递给dst。cvCopy会把src中的数据复制到dst的内存中。这是一种深拷贝,真正地拷贝了一个新的图像矩阵,此时二者相互之间没有影响,但是如果设置了ROI、COI,copy只会复制ROI、COI区域的内容。
/*OpenCV v1版本*/IplImage img_origin = cvLoadImage(".\\picture.jpg", CV_LOAD_IMAGE_COLOR); // 读取一张彩色图 IplImage img_copy = cvCreateImage(Size(img_origin->width, img_origin ->height), img_origin ->depth, img_origin ->nChannels); // 开辟一个新的内存空间,图像的大小、深度与颜色通道与原图保持一致cvCopy(img_origin, img_copy); // 拷贝图像/*OpenCV v2之后版本*/Mat img_origin = imread(picture, IMREAD_COLOR); // 读取一张彩色图 Mat img_copy;img_origin.copyTo(img_copy); //在拷贝数据前会有一步img_copy.create(this->size , this->type)
方法3、cvCloneImage
cvCloneImage的原型是:
IplImage* cvCloneImage( const IplImage* image );
OpenCV官网关于cvCloneImage函数的介绍
在使用函数之前,不用开辟内存。该函数会自己开一段内存,然后复制好图像里面的数据,然后返回这段内存中的数据。clone是把所有的都复制过来,不论你是否设置了ROI、COI等影响,clone都会原封不动的克隆过来。用clone复制后,如果源图像在内存中消失,复制的图像也变了,而用copy复制,源图像消失后,复制的图像不变。
/*OpenCV v1版本*/IplImage img_origin = cvLoadImage(".\\picture.jpg", CV_LOAD_IMAGE_COLOR); // 读取一张彩色图 IplImage img_copy = cvCloneImage(img_origin);/*OpenCV v2之后版本*/Mat img_origin = imread(picture, IMREAD_COLOR); // 读取一张彩色图Mat img_copy = img_origin.clone();
0 0
- OpenCV图像拷贝方法与注意点(=、copy、clone)
- 深拷贝与浅拷贝(clone方法与赋值)
- OpenCV copyTo、clone、“=”与拷贝构造函数的区别
- clone方法 --深拷贝与浅拷贝
- [Java]Copy Constructor与clone()方法
- java.util.Collections.copy()方法注意点
- java.util.Collections.copy()方法注意点
- java.util.Collections.copy()方法注意点
- java.util.Collections.copy()方法注意点
- java.util.Collections.copy()方法注意点
- java.util.Collections.copy()方法注意点
- java.util.Collections.copy()方法注意点
- clone()方法copy
- Java中的clone方法之浅拷贝与深拷贝
- java Object的clone方法,浅拷贝与深拷贝
- Java中的clone方法-深拷贝与浅拷贝
- copy与clone
- OpenCV中图像的浅拷贝与深拷贝
- OPENCV threshold type类型选择
- javascript中prototype、constructor以及__proto__之间的三角关系
- java,hibernate和sql server对应的数据类型表
- React之ref详细用法
- Pixhawk原生固件PX4之驱动ID
- OpenCV图像拷贝方法与注意点(=、copy、clone)
- Struts2高位漏洞升级到struts2.3.32
- 这10道javascript笔试题你都会么
- HDU 2141 Can you find it?(二分)
- TCP协议中的三次握手和四次挥手(图解)
- 句柄是什么?
- Linux下安装Composer
- 【后缀数组】BZOJ1031(JSOI2007)[字符加密Cipher]题解
- 编写.gitignore文件时踩的坑