【问题标题】:OpenCV: is it possible to perform openGL pixel shading with it?OpenCV:是否可以使用它执行 openGL 像素着色?
【发布时间】:2011-06-03 18:29:02
【问题描述】:

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

【问题讨论】:

    标签: c++ opengl opencv pixel shader


    【解决方案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 以获得最终图像。

      【讨论】:

      • 是否有关于如何执行此类操作的文章或示例代码演示,或者您可以在这里提供吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2021-10-13
      相关资源
      最近更新 更多