将cv :: ogl函数与OpenGL缓冲区一起使用,特别是cv :: ogl :: mapGLBuffer

时间:2018-08-31 01:23:55

标签: c++ opencv opengl image-processing buffer

(出于这个问题的目的,“ ogl”是指OpenCV表示形式,“ OpenGL”是指标准Khronos版本)

我想结合使用OpenGL和OpenCV的实用程序。该文档支持将ogl缓冲区传输到OpenCV Mat / UMat文件,但是,即使不是不可能使用OpenGL缓冲区,该方法也似乎过于复杂。

我了解

 cv::ogl::mapGLBuffer

需要从OpenCV创建的ogl缓冲区。但是,我已经有一个在OpenGL中创建的缓冲区(使用glGenBuffers),不幸的是OpenGL以不同的方式(以int形式)引用了它们的缓冲区。因此,当我尝试将实际的OpenGL缓冲区映射到UMat时,我得到:

invalid initialization of reference of type ‘const cv::ogl::Buffer&’ from expression of type ‘GLuint {aka unsigned int}’
     UMatimage = cv::ogl::mapGLBuffer(gl_buffer_id, cv::ACCESS_READ);

那么,是否可以使用从普通OpenGL中为OpenCV版本ogl创建的缓冲区?或者,除了mapGLBuffer函数之外,还有没有其他方法可以允许UMat访问OpenGL缓冲区上的图像。

我可以使用glreadpixels将其从OpenGL缓冲区直接传输到cv :: Mat,但这需要从GPU传输到CPU,这是我要避免的事情。

编辑

我尝试过:

 cv::ogl::Buffer CV_GL_Buff( 1080, 1240, CV_8UC3, gl_ids);
 cv::UMat m;
 m = cv::ogl::mapGLBuffer(CV_GL_Buff);
 glUnmapBuffer(m);
 cv::flip(m,m,0);

然后显示“ m”,这不是错误,但图像是静态的,并且定期瞥见一些有价值的东西!

0 个答案:

没有答案