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++ 覆盖cv::Mat.data时会发生什么情况_C++_Opencv - Fatal编程技术网

C++ 覆盖cv::Mat.data时会发生什么情况

C++ 覆盖cv::Mat.data时会发生什么情况,c++,opencv,C++,Opencv,当我们在cv::Mat对象的data属性中手动添加缓冲区地址,然后删除该缓冲区时,会发生什么情况 比如说, cv::Mat test; test.data = (address of Buffer A); 删除缓冲区A时,测试数据会发生什么情况?文档: 所以,由于test不拥有缓冲区A,一旦它被删除,若您访问test.data,它就是UB。 然而,由于copy是一个深度复制,所以您可以访问copy.data您可以按照您所描述的方式发布代码吗?为什么不使用这两个构造函数中的一个呢Mat(整数行、

当我们在
cv::Mat
对象的
data
属性中手动添加缓冲区地址,然后删除该缓冲区时,会发生什么情况

比如说,

cv::Mat test;
test.data = (address of Buffer A);
删除
缓冲区A
时,
测试数据会发生什么情况?

文档:

所以,由于test不拥有缓冲区A,一旦它被删除,若您访问test.data,它就是UB。
然而,由于copy是一个深度复制,所以您可以访问copy.data

您可以按照您所描述的方式发布代码吗?为什么不使用这两个构造函数中的一个呢Mat(整数行、整数列、整数类型、void*数据、大小步长=自动步长);Mat(大小、整型、void*数据、大小步长=自动步长);'他们将设置数据指针以及正确的类型和大小。请阅读此处的文档
int rows, cols, type; // you need initialize them
void* data = (address of Buffer A)
cv::Mat test = cv::Mat(rows, cols, type, data); // according to documentation, test does not own data
cv::Mat copy = test.clone() // copy copies is a deep copy of test