2016-07-15 6 views

Antwort

2

Der bestimmte Konstruktor, den Sie verwenden, kopiert die Daten nicht. Aus Effizienzgründen ist es so konzipiert. Dies erzeugt im Grunde nur die Mat Header und ändert den internen Zeiger auf den mitgelieferten data Array. Wenn Sie die zugrunde liegenden Daten in nachfolgenden Operationen nicht ändern möchten, ohne das Eingabedatenarray zu beeinflussen, müssen Sie sie kopieren.

Sie könnten clone das Mat Objekt und dies wird die zugrunde liegenden Daten kopieren. Lesen Sie die Dokumentation hier:

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

So etwas wie:

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

// work on the cloned object now 
Verwandte Themen