我正在研究 OpenCV,但我很困惑。我浏览了这个链接,我不太了解 OpenCV 中“=”运算符的概念。
假设我声明 3 个矩阵如下:
Mat img1, img2, gray;
gray
如果我从相机捕获的图像中获取矩阵并将其分配给img1
如下所述,实际会发生什么?中的数据是gray
被复制到img1
还是在它们之间共享数据?
img1 = gray;
OpenCV 的Mat
类只是实际图像数据的标头,它包含一个指向的指针。操作员复制指针(以及标题中的=
其他信息,如图像尺寸),以便两个Mat
s 共享相同的数据。这意味着修改一个中的数据Mat
也会更改另一个中的数据。这称为“浅”复制,因为仅复制顶层(标题),而不复制较低层(数据)。
要制作底层数据的副本(称为“深拷贝”),请使用该clone()
方法。您可以在链接到的页面上找到有关它的信息。
它在您提供的链接中进行了说明。
Mat& Mat::operator = (const Mat& m)
m :分配的右侧矩阵。矩阵赋值是O(1)运算,即不复制任何数据。相反,数据是共享的,并且引用计数器(如果有)会递增。在分配新数据之前,旧数据通过 Mat::release 取消引用。