OpenGL中的像素操作
Pixel manipulation in OpenGL
假设我有这张图片,里面有一个物体(一个立方体)。该对象正在被跟踪(带有标签),我设法在其上渲染一个虚拟立方体(增强现实)。现在我可以在上面渲染一个虚拟的立方体,我想用一些基本的被称为"inpainting"的淡化现实技术让物体"消失"。问题中的inpaint非常简单(它必须如此,否则FPS将受到影响),它需要我对像素及其邻居进行一些操作(如高斯模糊或其他基本图像处理)。
首先需要:
- 蒙版:黑色背景,白色方块。
- 访问初始图像的每个像素(坐标x和y)及其邻域,并根据掩模在相同x和y坐标上的像素值执行操作。所以基本上,蒙版的作用是说忽略这个像素或使用这个像素。
我如何使用OpenGL做到这一点?我希望能够访问像素值1乘1最好是在2D中,因为邻居。
我应该使用fbo还是pbo ?我读过很多关于缓冲和方法像glDrawPixels()
,但我有麻烦把它们放在一起。我看到这种方法在使用GL_BACK
缓冲器,但我的已经使用。一些示例代码(c++)将非常感谢所有的手续(OpenG的调用),因为我仍然是OpenGL的初学者。
如果像素操作在OpenGL中太难,我甚至考虑使用OpenCV,因为我的AR库(Aruco)在OpenCV之上工作。在这种情况下,我仍然需要得到蒙版(黑色背景上的白色立方体),将其转换为cv::Mat
,然后进行处理。
我知道这种方法是低效的(来回从GPU/CPU),但我的目标(目前)是至少使基本工作
设置一个framebuffer对象来呈现原始图像+虚拟多维数据集。这是一个教程。
接下来,你可以将framebuffer纹理附加为下一阶段的输入(采样器)纹理,并渲染一个覆盖蒙版的四边形(两个三角形)。
在片段着色器中,你应该能够通过读取变量gl_FragCoord来采样你的"屏幕坐标"。将纹理过滤器函数设置为GL_NEAREST,你可以访问精确的纹理坐标。相邻像素也可以通过位移(deltaX =2/Width, deltaY=2/Height)。
使用以前的framebuffer纹理作为源是强制性的,因为当前活动的framebuffer只能写
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何在24位SDL_Surface上设置像素的颜色
- 如何从SDL_Surface获取特定像素的颜色
- 如何将CMSampleBufferRef/CIImage/UIImage转换为像素,例如uint8_t[]
- 在C++中查找像素 RGB 数据的最快方法是什么?
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 选择基于另一个垫子的非零像素的cv::Mat的一部分?
- 如何使用 sdl2 快速绘制像素网格?
- 如何在C++中进行像素操作? - Linux
- 我想知道像素/片段的原始模板值.零还是一个?如果可能的话,以获取哪些特定操作会修改模板值
- OpenCV像素操作有时不起作用
- ID3D11DeviceContext::D rawIndexed 方法是否等待顶点和像素着色器操作完成
- Qt - 在像素操作后显示无符号字符
- 解密不适用于保存的图像,但适用于图像的像素操作矩阵
- 使用C++进行像素操作
- 神秘的构建错误"symbol(s) not found for i386" - openFrameworks 像素操作
- 如何使用boost::gil处理数字像素操作中的溢出
- 使用像素阵列在SFML中操作图像
- OpenGL中的像素操作