我正在从事一个需要大量 OpenCL 代码的项目。我正在使用 OpenCV 的 ocl 模块来更快地开发我的项目,但是有些功能没有实现,我将不得不编写自己的 OpenCL 代码。
我的问题是:将数据从 Mat 和/或 oclMat 传输到 cl_mem 数组的最快和最便宜的方法是什么。换句话说,是否有从 oclMat 或 Mat 传输或入队(clEnqueueWriteBuffer)数据的好方法?
目前,我正在使用 for 循环从 Mat 读取数据(或从 oclMat 下载然后使用 for 循环),然后将其排队。事实证明这是昂贵的,因此我的问题。
感谢看到这个问题的人:)
最佳答案
我为 Boost.Compute 编写了一组互操作函数简化 OpenCL 和 OpenCV 使用的库。看看 opencv_copy_mat_to_buffer()
功能。
还有从 OpenCL 缓冲区复制回主机的函数 cv::Mat
并用于复制 cv::Mat
到 OpenCL image2d
对象。
关于opencv - 将数据从 Mat/oclMat 传输到 cl_mem (OpenCV + OpenCL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21356592/