OpenCV:是不是可以使用它执行 openGL 像素着色?
Posted
技术标签:
【中文标题】OpenCV:是不是可以使用它执行 openGL 像素着色?【英文标题】:OpenCV: is it possible to perform openGL pixel shading with it?OpenCV:是否可以使用它执行 openGL 像素着色? 【发布时间】:2011-06-03 18:29:02 【问题描述】:如何在 openCV 图像结构之上执行 OpenGL 像素着色器?有没有 OpenCV 的库或插件呢?
【问题讨论】:
【参考方案1】:我不会包括设置 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 图像)。
编辑:您可以渲染到屏幕或帧缓冲区对象,基本概念保持不变。只需确保渲染到正确的目标即可。
【讨论】:
【参考方案2】:当然可以,只需将图像作为 OpenGL 纹理上传,绘制纹理映射四边形,然后使用片段着色器通过帧缓冲区对象绘制到另一个纹理中。
你可以这样做多次,然后将纹理数据回读到 CPU 以获得最终图像。
【讨论】:
是否有关于如何执行此类操作的文章或示例代码演示,或者您可以在这里提供吗?以上是关于OpenCV:是不是可以使用它执行 openGL 像素着色?的主要内容,如果未能解决你的问题,请参考以下文章
由于OpenGL可以执行内置的背面剔除,因此它必须计算顶点法线;可以访问这些而不是将其作为属性发送吗?