如何使用尽可能少的复制操作将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错误跟踪器上报告。 –