C ++ Opencv - 对mat的任何更改,也改变用于初始化的向量

时间:2016-07-15 15:08:21

标签: c++ opencv

我有一个向量data,我创建了一个cv::mat

cv::Mat HNorm(this->data.size(), 1, CV_32FC1, this->data.data());

然后我规范化HNorm的值:

normalize(HNorm, HNorm, 0, 300, cv::NORM_MINMAX, -1, cv::Mat());

事实是data向量发生了同样的规范化。我想要的是能够使用HNorm而不影响data

1 个答案:

答案 0 :(得分:2)

您使用的特定构造函数不会复制数据。出于效率原因,它采用这种方式设计。这基本上只创建Mat标头并更改内部指针以指向提供的data数组。如果您不想在后续操作中更改基础数据而不影响输入数据阵列,则需要复制它。

您可以clone Mat对象,这将复制基础数据。请参阅此处的文档:

http://docs.opencv.org/master/d3/d63/classcv_1_1Mat.html#ad1c9cc37d66c4e5bd05fae36f62d1cb4

类似于:

cv::Mat HNorm(this->data.size(), 1, CV_32FC1, this->data.data());
cv::Mat cloned = HNorm.clone();

// work on the cloned object now