如何通过尽可能少的复制操作将 cv::gpu::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 内容必须对齐...
还有其他(更好的)方法吗?
最佳答案
这里是不产生任何不必要复制的方法:
GpuMat fooGpu(numRows, numCols, CV_32FC1);
std::vector<float> vec;
vec.resize(numCols);
fooGpu.row(i).download(Mat(vec).reshape(1/*channels*/, 1/*rows*/));
关于c++ - 将 GpuMat 行复制到 std::vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7484784/