如何使用盡可能少的複製操作將cv :: gpu :: GpuMat行轉移到std :: vector?將GpuMat行復制到std :: vector
我能想到的最快方法是:
GpuMat fooGpu(numRows, numCols, CV_32FC1);
Mat foo = fooGpu;
Mat fooRow = foo.row(i);
std::vector<float> vec;
vec.resize(numCols);
memcpy(&vec[0], fooRow.data, sizeof(float)*numCols);
但我什至不知道,如果這個工程,因爲fooRow內容都必須對齊......
是否有另(更好)的方式來做到這一點?
謝謝!這正是我一直在尋找的:) – Ben
不,對不起。我測試了它,它不起作用。 Mat(vec)使用vec作爲初始值,但似乎並未指向vec的數據,因爲下載後,vec仍然充滿了零。 Mat m; fooGpu.row(i).download(m); vec = m; 的作品,但這又涉及複製。 – Ben
我很確定'Mat(vec)'共享矢量數據,但矢量必須分配給正確的長度('vec.resize(numCols);'是必須的)。如果這個代碼不起作用,那麼這是一個OpenCV錯誤,應該在OpenCV錯誤跟蹤器上報告。 –