在OpenCV的旧版本中,我可以使用OpenGL渲染到后台缓冲区,使用glreadpixels
将像素“复制”到OpenCV图像(iplimage?)进行一些处理(模糊,与另一个OpenCV加载的模板匹配)图片)。然而,这将花费我从GPU到CPU的转移,然后如果我想显示它,回到GPU。
现在我可以通过使用clEnqueueAcquireGLObjects
来完成与OpenGL和OpenCL类似的操作,而我根本不需要传输。我将OpenGL呈现给Framebuffer,让OpenCL控制它。
然而,这迫使我编写自己的OpenCL内核(没有人有时间......在Nvidia上调试OpenCL实际上非常困难),无论我想做什么处理。既然OpenCV有一些很好的OpenCL加速流程,我想尝试一下。
所以我的问题:是否可以渲染到Framebuffer(或GPU上的另一个GL上下文),控制(或复制)OpenCV上下文(umat?)以进行OpenCL加速处理?如果是这样,如何(大图,关键组件)?
我有一种感觉,我可以使用cv::ogl::Buffer
来包装缓冲区,但文档并不完全清楚,然后使用ogl::Buffer::copyTo
复制它。类似:Is it possible to bind a OpenCV GpuMat as an OpenGL texture?
其他参考:Transfer data from Mat/oclMat to cl_mem (OpenCV + OpenCL)