是否可以将OpenCV GpuMat绑定为OpenGL纹理? [英] Is it possible to bind a OpenCV GpuMat as an OpenGL texture?

查看:491
本文介绍了是否可以将OpenCV GpuMat绑定为OpenGL纹理?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我找不到任何参考资料,除了:

I haven't been able to find any reference except for:

http://answers.opencv.org/question/9512/how-to-bind-gpumat-to-texture/

它讨论了CUDA方法。

which discusses a CUDA approach.

理想情况下,我想更新一个OpenGL纹理, cv :: gpu :: GpuMat 没有复制回CPU,并且没有直接使用CUDA(虽然我认为这可能是必要的,直到添加此功能)。

Ideally I'd like to update an OpenGL texture with the contents of a cv::gpu::GpuMat without copying back to CPU, and without directly using CUDA (although i presume this may be necessary until this feature is added).

推荐答案

OpenCV支持OpenGL。请参见 opencv2 / core / opengl_interop.hpp 头文件。您可以将GpuMat的内容复制到纹理:

OpenCV has OpenGL support. See opencv2/core/opengl_interop.hpp header file. You can copy the content of GpuMat to Texture:

cv::gpu::GpuMat d_mat(768, 1024, CV_8UC3);
cv::ogl::Texture2D tex;
tex.copyFrom(d_mat);
tex.bind();
// draw something

您也可以使用 cv :: ogl :: Buffer 类。它是OpenGL缓冲存储器的包装器。这个内存可以映射到没有内存复制的CUDA内存:

You can also use cv::ogl::Buffer class. It is a wrapper for OpenGL buffer memory. This memory can be mapped to CUDA memory without memory copy:

cv::ogl::Buffer ogl_buf(1, 1000, CV_32FC3);
cv::gpu::GpuMat d_mat = ogl_buf.mapDevice();
// fill d_mat with CUDA
ogl_buf.unmapDevice();
// use ogl_buf in OpenGL
ogl_buf.bind(cv::ogl::Buffer::ARRAY_BUFFER);
glDrawArray(...);

这篇关于是否可以将OpenCV GpuMat绑定为OpenGL纹理?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆