0
点赞
收藏
分享

微信扫一扫

OpenCV | Mat类的copyT、clone、=赋值的区别


OpenCV | Mat类的copyT、clone、=赋值的区别

  • ​​1、clone​​
  • ​​2、copyTo​​
  • ​​3、等号‘=’赋值​​
  • ​​4、验证​​

先说一下Mat类的结构。

Mat类我们可以分成两部分:头部分、矩阵数据部分。

头部分:用于记录矩阵数据的大小、类型、数据指针等信息

矩阵数据部分:实际的矩阵数据。

现在我们有以下图像:

Mat img(Size(300, 300), CV_8UC3, Scalar(255, 0, 0));  // 300X300大小的蓝色图片

Mat img_copy; // 拷贝
Mat img_clone; // 克隆
Mat img_assign; // 赋值

1、clone

img_clone = img.clone();

img_clone与img完全独立,修改img不影响img_clone

2、copyTo

img.copyTo(img_copy);

当img与img_copy大小相同时,直接进行矩阵赋值操作,大小不同时,等同于clone

3、等号‘=’赋值

使用赋值操作后的img_assign,只复制Mat头部有关矩阵大小等信息相关的数据,不复制矩阵数据,也就是说img_assign和img同时指向一块矩阵区域。

img_assign = img;

4、验证

打印一下各个mat的数据区域的内存地址,可以看到img_assign和img的数据指针地址相同,而img_clone和img_copy数据地址各不相同。

OpenCV | Mat类的copyT、clone、=赋值的区别_copyTo


举报

相关推荐

0 条评论