【发布时间】:2011-06-03 18:29:02
【问题描述】:
如何在 openCV 图像结构之上执行 OpenGL 像素着色器?有没有 OpenCV 的库或插件呢?
【问题讨论】:
标签: c++ opengl opencv pixel shader
如何在 openCV 图像结构之上执行 OpenGL 像素着色器?有没有 OpenCV 的库或插件呢?
【问题讨论】:
标签: c++ opengl opencv pixel shader
我不会包括设置 OpenGL 上下文、执行实际渲染操作等。将其视为伪代码中的大纲,只是试图让您了解如何做到这一点(假设您想重用OpenCV 中的输出:
首先你创建一个纹理(必须只做一次,很简单),然后你将图像数据从 OpenCV 上传到创建的纹理(或更新它)。
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, ...parameters based on your image, pointer to raw image data);
现在您的 OpenCV 图像位于 OpenGL 纹理中。稍后您只需渲染图像并检索像素数据。
glViewport(0,0,imagewidth,imageheight); // has to be done once
renderTexturedQuadWithShaders();
glReadPixels(..., &pointer); // read the raw image data again
这应该可以,但是不要忘记您必须使用正确的纹理格式才能不搞砸图像数据,并且您可能必须使用另一个缓冲区(现在我不能 100% 确定您是否可以将图像数据直接写入您的 OpenCV 图像)。
编辑:您可以渲染到屏幕或帧缓冲区对象,基本概念保持不变。只需确保渲染到正确的目标即可。
【讨论】:
当然可以,只需将图像作为 OpenGL 纹理上传,绘制纹理映射四边形,然后使用片段着色器通过帧缓冲区对象绘制到另一个纹理中。
你可以这样做多次,然后将纹理数据回读到 CPU 以获得最终图像。
【讨论】: