我有一个向量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
。
答案 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