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”
如何更改用于访问像素的代码
答案 0 :(得分:1)
cv::cuda::GpuMat
类的数据实时保存在GPU /设备上,CPU /主机代码无法直接访问。这就是为什么没有等同于cv::Mat.at()
的原因。在主机和设备之间传输数据的速度很慢,因此在cv::cuda::GpuMat
上执行每个像素的操作将比在cv::Mat
上进行慢得多。
但是可以编写执行每像素操作的CUDA内核。恐怕我不能给出很好的建议,但是这显然是可行的,并且类似问题的答案such as this one可能会为您提供帮助。
除此之外,具体取决于您需要执行的操作,可能会有一个内置功能可以执行类似的操作。