opencv 浅拷贝与深拷贝迷惑之处

Posted 盐饼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv 浅拷贝与深拷贝迷惑之处相关的知识,希望对你有一定的参考价值。

关于opencv中的浅拷贝与深拷贝大家众所周知,这里先赘述一下

(1)浅拷贝:  

Mat B;  

B = image  // 第一种方式  

Mat C(image); // 第二种方式

这两种方式称为浅copy,是由于它们有不同的矩阵头,但是它们共享内存空间,即指向一个矩阵。当图像矩阵发生变化时,两者相关联,都会变化。

(2)深拷贝

Mat B,C;  

B = image.clone();       // 第一种方式  

image.copyTo(C); // 第二种方式  

深拷贝是真正的copy了一个新的图像矩阵,此时image,B,C三者相互没有影响

 

但是这里涉及到一个容易迷惑的地方,那就是对一个Mat 对象进行浅拷贝时,对于两者的操作是等同和关联的,但是这些操作仅限于数据块的操作,若是数据头的操作如再次进行浅拷贝,那最开始被拷贝的对象的数据不会发生改变

 

例如:

Mat B;  

B = image 

Mat C =  logo;

B = logo  

这时 image的数据并不会发生变化,因为对于 B = logo   这一操作只涉及到了数据头并没有涉及到数据块,当然两者不会关联变化 。

以上是关于opencv 浅拷贝与深拷贝迷惑之处的主要内容,如果未能解决你的问题,请参考以下文章

C++:浅拷贝与深拷贝

C++:浅拷贝与深拷贝

Java专题十九:浅拷贝与深拷贝

实现浅拷贝与深拷贝

实现浅拷贝与深拷贝

JavaScript浅拷贝与深拷贝