我正在使用OpenCV T-API来获取在GPU上执行的OpenCV内容(如果可用)。我有一个获取内存缓冲区的函数,我将其读入Mat,将其转换为cv::UMat
并执行我的更改。这种方法非常好,处理速度提高了3到10倍,取决于我的处理方式。这对我帮助很大,因为我想实时更改相机图像,并且显着提高了我的FPS计数。
但是,我需要将数据恢复到内存中以便在屏幕上显示,因此我需要将数据复制回内存,我感到震惊的是它有多慢。将图像复制到UMat中实际上需要花费15倍的时间。我在cv::UMat::getMat()
中使用cv::UMat
方法,还有其他方法可以加快速度吗?
另外,我需要将图像数据写入特定的内存地址。当我使用cv::UMat::getMat()
时,会创建一个新的cv::Mat
以及数据缓冲区,我必须将数据复制到所需的地址。有没有办法直接将数据从cv::UMat
写入地址?
如果我直接使用OpenCL而不是使用OpenCV透明API会更快吗?