OpenCV: возможно ли с его помощью выполнить затенение пикселей openGL? - PullRequest
1 голос
/ 03 июня 2011

Как выполнить пиксельные шейдеры OpenGL поверх структур изображений openCV?есть ли какая-нибудь библиотека или плагин для OpenCV для этого?

Ответы [ 2 ]

3 голосов
/ 04 июня 2011

Я не буду включать настройку контекста 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 голосов
/ 03 июня 2011

Конечно, вы можете просто загрузить свое изображение в виде текстуры OpenGL, нарисовать четырехугольник с отображением текстуры и использовать фрагментный шейдер для рисования в другую текстуру с помощью объекта Framebuffer.

Вы можете сделать это много раз, а затем перенести данные текстуры в ЦП, чтобы получить окончательное изображение.

...