gpt4 book ai didi

c++ - OpenGL 中的像素操作

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:52:37 25 4
gpt4 key购买 nike

假设我有这张图片,里面有一个对象(一个立方体)。该对象正在被跟踪(带有标签),我设法在其上渲染一个虚拟立方体(增强现实)。现在我可以在其上渲染一个虚拟立方体,我希望能够使用一些称为“修复”的非常基本的减弱现实技术使对象“消失”。有问题的修复非常简单(它必须如此,否则 FPS 会受到影响)并且它需要我对像素及其相邻像素进行一些操作(例如高斯模糊或其他基本图像处理)。

为此我首先需要:

  1. 面具:黑色背景,里面有一个白色立方体。
  2. 访问初始图像的每个像素(在坐标 x 和 y 处)及其邻域,并根据掩码在相同 x 和 y 坐标处的像素值进行处理。所以基本上, mask 是一种表示忽略此像素或使用此像素的方式。

如何使用 OpenGL 执行此操作?由于邻居,我希望能够最好在 2D 中逐一访问像素值。

我使用 FBO 还是 PBO?我已经阅读了很多有关缓冲区和方法的内容,例如 glDrawPixels() 但我无法将它们放在一起。我看到这个方法的论文使用了 GL_BACK 缓冲区,但我的已经被使用了。一些示例代码 (C++) 非常感谢所有手续(OpenG` 调用),因为我仍然是 OpenGL 的初学者。

如果像素操作在 OpenGL 中太难,我什至会考虑使用 OpenCV,因为我的 AR 库 (Aruco) 在 OpenCV 之上运行。在那种情况下,我仍然需要获取 mask (黑色背景上的白色立方体),将其转换为 cv::Mat,然后进行处理。

我知道这种方法效率低下(在 GPU/CPU 之间来回切换),但我的目标(目前)是至少让基础工作正常进行。

最佳答案

设置一个帧缓冲区对象来渲染您的原始图像 + 虚拟立方体。这是一个 tutorial .

接下来,您可以将该帧缓冲区纹理附加为下一阶段的输入(采样器)纹理,并渲染覆盖 mask 的四边形(两个三角形)。

在片段着色器中,您应该能够通过读取变量 gl_FragCoord 对“屏幕坐标”进行采样。将纹理过滤器函数设置为 GL_NEAREST,您可以访问精确的纹理坐标。相邻像素也可以使用位移(deltaX = 2/Width,deltaY=2/Height)。

必须使用以前的帧缓冲区纹理作为源,因为当前事件的帧缓冲区是只写的。

关于c++ - OpenGL 中的像素操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14018615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com