OpenCV 中如何复制图像?

· 约 3 分钟读完 · 第 31 / 144 章

推荐答案

在 OpenCV 中,复制图像可以通过以下几种方式实现:

  1. 使用 cv::Mat::clone() 方法:

  2. 使用 cv::Mat::copyTo() 方法:

  3. 使用赋值运算符:

    注意:这种方式是浅拷贝,dst 和 src 共享相同的数据。

本题详细解读

1. cv::Mat::clone() 方法

clone() 方法会创建一个新的 cv::Mat 对象,并将原图像的数据完全复制到新对象中。这意味着 dst 和 src 是两个独立的对象,修改其中一个不会影响另一个。

2. cv::Mat::copyTo() 方法

copyTo() 方法会将原图像的数据复制到目标图像中。如果目标图像 dst 的大小和类型与 src 不匹配,copyTo() 会自动调整 dst 的大小和类型。与 clone() 类似,copyTo() 也会创建一个独立的数据副本。

3. 赋值运算符

使用赋值运算符 = 进行图像复制时,实际上只是创建了一个新的 cv::Mat 对象,但它与原始对象共享相同的数据。这意味着 dst 和 src 指向同一块内存,修改其中一个会影响另一个。这种方式称为浅拷贝。

选择哪种方式?

  • 如果需要完全独立的图像副本,推荐使用 clone() 或 copyTo()。
  • 如果只是需要一个指向相同数据的引用,可以使用赋值运算符。

代码示例

在这个示例中,dst1 和 dst2 是 src 的独立副本,而 dst3 与 src 共享数据。