如何在OpenCV Cuda(GpuMat)中访问像素

时间:2019-09-11 12:25:18

标签: c++ opencv cuda pixel gpu-programming

cv::Mat image = cv::Mat::zeros(1920,1080,CV_8UC4); //it's an example (I use image have 4 channel)
cv::Vec4b& pixel = image.at<cv::Vec4b>(i,j) // i and j is rows and cols

我要使用Cuda(GpuMat),并且没有“ .at”

如何更改用于访问像素的代码

1 个答案:

答案 0 :(得分:1)

cv::cuda::GpuMat类的数据实时保存在GPU /设备上,CPU /主机代码无法直接访问。这就是为什么没有等同于cv::Mat.at()的原因。在主机和设备之间传输数据的速度很慢,因此在cv::cuda::GpuMat上执行每个像素的操作将比在cv::Mat上进行慢得多。

但是可以编写执行每像素操作的CUDA内核。恐怕我不能给出很好的建议,但是这显然是可行的,并且类似问题的答案such as this one可能会为您提供帮助。

除此之外,具体取决于您需要执行的操作,可能会有一个内置功能可以执行类似的操作。