OpenCV:可以用它执行openGL像素着色吗?

时间:2011-06-03 18:29:02

标签: c++ opengl opencv pixel shader

如何在openCV图像结构之上执行OpenGL像素着色器?是否有任何OpenCV的库或插件?

2 个答案:

答案 0 :(得分:3)

我不会包括设置OpenGL上下文,执行实际的渲染操作等。请将此视为伪代码中的大纲,只是试图让您了解如何执行它(假设您要重用在OpenCV中输出:

首先你创建一个纹理(必须只做一次coirse),然后你将图像数据从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图像。)

编辑:您可以渲染到屏幕或帧缓冲对象,基本概念保持不变。只需确保渲染到正确的目标。

答案 1 :(得分:2)

当然可以,只需将图像上传为OpenGL纹理,绘制纹理贴图四边形,然后使用片段着色器绘制另一个带有Framebuffer对象的纹理。

您可以多次执行此操作,然后将纹理数据回读到CPU以获取最终图像。