首页 > 代码库 > opencv 浅拷贝与深拷贝迷惑之处
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 浅拷贝与深拷贝迷惑之处
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。