2016-07-15 58 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