C++ OpenCV=运算符
我正在使用OpenCV,我有点困惑。我经历了这些,但我不太理解OpenCV中“=”运算符的概念 假设我声明3个矩阵如下:C++ OpenCV=运算符,c++,opencv,C++,Opencv,我正在使用OpenCV,我有点困惑。我经历了这些,但我不太理解OpenCV中“=”运算符的概念 假设我声明3个矩阵如下: Mat img1, img2, gray; 如果我从相机拍摄的图像中获得矩阵灰色,并将其分配给img1,如下文所述,实际会发生什么?gray中的数据是否被复制到img1中,或者是它们之间共享了数据 img1 = gray; 它在您提供的链接中进行了解释 材料与材料::运算符=(常数材料与材料) m:指定的右侧矩阵。矩阵赋值是O(1)运算,即,不复制任何数据。相反,数据是共
Mat img1, img2, gray;
如果我从相机拍摄的图像中获得矩阵灰色
,并将其分配给img1
,如下文所述,实际会发生什么?gray
中的数据是否被复制到img1
中,或者是它们之间共享了数据
img1 = gray;
它在您提供的链接中进行了解释 材料与材料::运算符=(常数材料与材料) m:指定的右侧矩阵。矩阵赋值是O(1)运算,即,不复制任何数据。相反,数据是共享的,并且参考计数器(如果有)是递增的。在分配新数据之前,通过Mat::release解除对旧数据的引用
OpenCV的
Mat
类只是实际图像数据的标题,它包含指向该数据的指针。=
操作符复制指针(以及标题中的其他信息,如图像尺寸),以便两个Mat
共享相同的数据。这意味着修改一个Mat
中的数据也会更改另一个中的数据。这称为“浅层”复制,因为只复制顶层(标题),而不复制下层(数据)
要制作基础数据的副本(称为“深度副本”),请使用clone()
方法。您可以在链接的页面上找到相关信息。如何将数据从gray复制到img1?这很好地解释了这个概念。我使用了clone()方法,我的代码工作起来很神奇。非常感谢你。