3

我正在研究 OpenCV,但我很困惑。我浏览了这个链接,我不太了解 OpenCV 中“=”运算符的概念。

假设我声明 3 个矩阵如下:

Mat img1, img2, gray;

gray如果我从相机捕获的图像中获取矩阵并将其分配给img1如下所述,实际会发生什么?中的数据是gray被复制到img1还是在它们之间共享数据?

img1 = gray;
4

2 回答 2

8

OpenCV 的Mat类只是实际图像数据的标头,它包含一个指向的指针。操作员复制指针(以及标题中的=其他信息,如图像尺寸),以便两个Mats 共享相同的数据。这意味着修改一个中的数据Mat也会更改另一个中的数据。这称为“浅”复制,因为仅复制顶层(标题),而不复制较低层(数据)。

要制作底层数据的副本(称为“深拷贝”),请使用该clone()方法。您可以在链接到的页面上找到有关它的信息。

于 2013-08-09T19:29:39.250 回答
1

它在您提供的链接中进行了说明。

Mat& Mat::operator = (const Mat& m)

m :分配的右侧矩阵。矩阵赋值是O(1)运算,即不复制任何数据。相反,数据是共享的,并且引用计数器(如果有)会递增。在分配新数据之前,旧数据通过 Mat::release 取消引用。

于 2013-08-09T19:20:14.593 回答