2016-07-15 97 views
0

我有一个矢量data载体和我创建cv::matC++ opencv的 - 任何变化垫,更改用于初始化垫以及

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向量。我想要的是能够在不影响data的情况下使用HNorm

回答

2

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

您可能cloneMat对象,这将复制底层数据。在这里看到的文档:

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