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 浅拷贝与深拷贝迷惑之处的主要内容,如果未能解决你的问题,请参考以下文章