如何访问 gpuMat 中的数据

How can I get access to the data in the gpuMat?

本文关键字:gpuMat 数据 访问 何访问      更新时间:2023-10-16

opencv 关于 GPU 的文档::ORB

我想用gpu::orb获取图像的关键点,关键点的类型是gpuMat.然后我试图访问gpuMat的数据作为文档。

我尝试了下面的代码:(关键点是一个gpumat)

cout<<keypoints.ptr<float>(3)[4]<<endl;

但我得到了一个"分段错误(核心转储)"。我知道我们不能修改 gpuMat 中的数据,那么我怎样才能在 gpuMat 中获取数据呢?

根据OpenCV文档cv::cuda::GpuMat是:

具有引用计数的 GPU 内存的基本存储类。它的接口与 Mat 接口匹配,但存在以下限制:

  • 不支持任意尺寸(仅 2D)
  • 没有返回对其数据的引用的函数(因为 GPU 上的引用对 CPU 无效
  • 无表达式模板技术支持

ptr将返回指向设备内存的指针。您无法直接从主机读取设备内存。为了在主机函数(如operator <<)中使用数据,需要使用GpuMat::download(cv::Mat& m)将数据复制到主机内存中。