Используйте функции cv :: ogl с OpenGL Buffers, в частности cv :: ogl :: mapGLBuffer - PullRequest
0 голосов
/ 31 августа 2018

(Для целей этого вопроса «ogl» относится к представлению OpenCV, «OpenGL» относится к стандартной версии Khronos)

Я бы хотел объединить утилиты OpenGL и OpenCV. Документация поддерживает перенос буфера ogl в файл OpenCV Mat / UMat, однако способ сделать это кажется слишком сложным, если не невозможным, сделать это с буфером OpenGL.

Я понимаю, что

 cv::ogl::mapGLBuffer

требуется буфер ogl, созданный из OpenCV. Однако у меня уже есть буфер, который я создал в OpenGL (используя glGenBuffers), к сожалению, OpenGL по-разному ссылается на свои буферы (в виде int). Поэтому, когда я пытаюсь отобразить фактический буфер OpenGL в UMat, я получаю:

invalid initialization of reference of type ‘const cv::ogl::Buffer&’ from expression of type ‘GLuint {aka unsigned int}’
     UMatimage = cv::ogl::mapGLBuffer(gl_buffer_id, cv::ACCESS_READ);

Итак, можно ли использовать уже созданные буферы из обычного OpenGL для версии OpenCV, ogl? Или, кроме функции mapGLBuffer, есть возможность разрешить UMat обращаться к изображению в буфере OpenGL.

Я могу сделать это с glreadpixels из буфера OpenGL непосредственно в cv :: Mat, но это требует передачи из GPU в CPU, чего я стараюсь избегать.

редактировать

Я пытался:

 cv::ogl::Buffer CV_GL_Buff( 1080, 1240, CV_8UC3, gl_ids);
 cv::UMat m;
 m = cv::ogl::mapGLBuffer(CV_GL_Buff);
 glUnmapBuffer(m);
 cv::flip(m,m,0);

и затем отображается «m», это не ошибка, но изображение статично с периодическими проблесками чего-то стоящего!

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