(Для целей этого вопроса «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», это не ошибка, но изображение статично с периодическими проблесками чего-то стоящего!