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 像素着色?的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV-3.0 的 OpenGL 支持

由于OpenGL可以执行内置的背面剔除,因此它必须计算顶点法线;可以访问这些而不是将其作为属性发送吗?

Opencv 导入图片 Opengl 显示纹理(含用例代码)

OpenCV 为啥勾搭上 OpenGL

Opencv vs Opengl用于图像过滤器

openni,opencv,opengl这三个到底是啥?有啥关系?做啥用?