zoukankan      html  css  js  c++  java
  • 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   这一操作只涉及到了数据头并没有涉及到数据块,当然两者不会关联变化 。

  • 相关阅读:
    RHEL6 建立DVD repo
    stl之std::remove_copy
    分鱼问题
    Nutch的日志系统
    log4j配置文件及nutch中的日志配置
    slf4j教程
    Java中的日期操作
    Avro基础
    【JAVA编码专题】总结
    【JAVA编码专题】深入分析 Java 中的中文编码问题
  • 原文地址:https://www.cnblogs.com/hustpet/p/7157827.html
Copyright © 2011-2022 走看看