Как создать текстуру OpenGL из неконтинентальных данных? - PullRequest
1 голос
/ 16 января 2011

Моя цель - создать текстуру из изображения с веб-камеры.Я получаю изображение с помощью нового VideoCapture интерфейса OpenCV с веб-камеры Logitech QuickCam для ноутбуков .Проблема в том, что я получаю не непрерывные данные таким образом, что означает, что в каждой строке матрицы, содержащей данные моего изображения, в конце есть пробел.выглядит следующим образом:

width = frame.cols * frame.elemSize(); // 640 * 3 = 1920 byte
step = frame.step[0]; // 2560 byte
gap = step - width; // 640 byte

Однако я не нашел способа сказать OpenGL пропускать последние 640 байт каждой строки при загрузке текстуры.Интересно, есть ли способ сделать это?В любом случае, если я просто загружу данные в качестве текстуры, изображение не будет отображаться правильно (что неудивительно).См. http://picasaweb.google.com/103165673068768416583/Opencv#5562843683120979026

Лучшим решением было бы сначала получить непрерывные данные, но, опять же, я не мог выяснить, как это сделать (с OpenCV).Если я копирую данные в непрерывную матрицу, она отображается правильно (см. http://picasaweb.google.com/103165673068768416583/Opencv#5562843692435711522).

Однако я не хочу копировать данные, если мне это не нужно. Есть идеи?

1 Ответ

1 голос
/ 16 января 2011

Вы можете попробовать комбинацию GL_UNPACK_ALIGNMENT и GL_UNPACK_ROW_LENGTH.

В вашем конкретном случае это даст:

glPixelStorei(GL_UNPACK_ALIGNMENT, 4)         // as 2560 is a multiple of 4
glPixelStorei(GL_UNPACK_ROW_LENGTH, 2560/3)   // to consider each row having this number of pixels

Но в целом вы уверены, чтоу каждого пикселя есть 3 байта?

Я заметил, что ваш step равен frame.cols * 4, я бы не удивился, если бы у каждого пикселя был байт заполнения с выравниванием, кратным 4.

Вы пытались указать OpenGL, что ваши исходные данные - GL_RGBA или GL_BGRA, при этом оставляя текстуру внутреннего формата для GL_RGB?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...