Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV=运算符_C++_Opencv - Fatal编程技术网

C++ OpenCV=运算符

C++ OpenCV=运算符,c++,opencv,C++,Opencv,我正在使用OpenCV,我有点困惑。我经历了这些,但我不太理解OpenCV中“=”运算符的概念 假设我声明3个矩阵如下: Mat img1, img2, gray; 如果我从相机拍摄的图像中获得矩阵灰色,并将其分配给img1,如下文所述,实际会发生什么?gray中的数据是否被复制到img1中,或者是它们之间共享了数据 img1 = gray; 它在您提供的链接中进行了解释 材料与材料::运算符=(常数材料与材料) m:指定的右侧矩阵。矩阵赋值是O(1)运算,即,不复制任何数据。相反,数据是共

我正在使用OpenCV,我有点困惑。我经历了这些,但我不太理解OpenCV中“=”运算符的概念

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

Mat img1, img2, gray;
如果我从相机拍摄的图像中获得矩阵
灰色
,并将其分配给
img1
,如下文所述,实际会发生什么?
gray
中的数据是否被复制到
img1
中,或者是它们之间共享了数据

img1 = gray;

它在您提供的链接中进行了解释

材料与材料::运算符=(常数材料与材料)

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


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


要制作基础数据的副本(称为“深度副本”),请使用
clone()
方法。您可以在链接的页面上找到相关信息。

如何将数据从gray复制到img1?这很好地解释了这个概念。我使用了clone()方法,我的代码工作起来很神奇。非常感谢你。