OpenCV Mat 拷贝与ROI



(1)浅拷贝

  1. //注意:浅拷贝 -  不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用)  
  2. Mat a;  
  3. Mat b = a; //a "copy" to b  
  4. Mat c(a); //a "copy" to c  
//注意:浅拷贝 -  不复制数据只创建矩阵头,数据共享(更改a,b,c的任意一个都会对另外2个产生同样的作用)
Mat a;
Mat b = a; //a "copy" to b
Mat c(a); //a "copy" to c

(2)深拷贝

  1. //注意:复制一个图像的ROI到另外一个图像的指定区域就简单多了。

    如opencv中给出的例子

    Rect r(1, 1, 10, 20); // 指定src 的 ROI子图像区域

    Mat dstroi =dst(Rect(0,10,r.width,r.height)); // 拿到 dst指定区域子图像的引用

    src(r).convertTo(dstroi, dstroi.type(), 1,0); // ROI子图像之间的复制

    此时,无需指定图像的ROI,计算也比较方便,清晰。
  2. Mat a;  
  3. Mat b = a.clone(); //a copy to b  
  4. Mat c;  
  5. a.copyTo(c); //a copy to c 

       6、src.convertTo(dst, type, scale, shift)

         当src.depth==dst.depth且noscale时,等同于copyTo(创建并复制);其他,转换并复制数据

(3)ROI

       复制一个图像的ROI到另外一个图像的指定区域就简单多了。如opencv中给出的例子

       Rect r(1, 1, 10, 20);  // 指定src 的 ROI子图像区域

       Mat dstroi =dst(Rect(0,10,r.width,r.height)); // 拿到 dst指定区域子图像的引用

       src(r).convertTo(dstroi, dstroi.type(), 1,0); // ROI子图像之间的复制

        此时,无需指定图像的ROI,计算也比较方便,清晰。

备注:

opencv矩阵赋值函数copyTo、clone、重载元算赋‘=’之间实现的功能相似均是给不同的矩阵赋值功能。

copyTo和clone函数基本相同,被赋值的矩阵和赋值矩阵之间空间独立,不共享同一空间。

但是重载元算赋‘=’,被赋值的矩阵和赋值矩阵之间空间共享,改变任一个矩阵的值,会同时影响到另一个矩阵。当矩阵作为函数的返回值时其功能和重载元算赋‘=’相同,赋值运算赋会给矩阵空间增加一次计数,所以函数变量返回后函数内部申请的变量空间并不会被撤销,在主函数中仍可以正常使用传递后的参数。







 











      • 1
        点赞
      • 0
        收藏
        觉得还不错? 一键收藏
      • 0
        评论
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值