c++ - 将 GpuMat 行复制到 std::vector

标签 c++ opencv copy gpu stdvector

如何通过尽可能少的复制操作将 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/

相关文章:

c++ - 在 C++ 中对在不同文件中声明和定义的两个类使用相同的命名空间

C++11,内存泄漏

python - 在 Python 中将 USB 视频捕获设备友好名称与 OpenCV 端口号相关联

C++ 对象构造函数通过 const 引用复制传递

python - 在 Python 中重用名称以节省内存

c++ - opencl 程序没有给出正确的输出

c++ - 如何用线段分割一般的闭合多边形

java - 如何使用 OpenCV 将图像转换为黑白图像并去除 android 中的阴影

c++ - 当 img(roi) 未返回正确值时如何正确提取 ROI

c++ - 将数组复制到另一个动态数组的问题