【发布时间】:2016-12-10 17:46:29
【问题描述】:
我正在尝试使用来自 OpenGL 的 glGetTexImage() 的输出来制作 OpenCV Mat()。我试图从中获取信息的纹理是使用调用制作的;
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA8UI, iWidth, iHeight, 0, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE, pImageData);
所以我尝试使用;
unsigned char* texture_bytes = (unsigned char*)malloc(sizeof(unsigned char)*texture_width*texture_height * 3);
glGetTexImage(GL_TEXTURE_2D, 0, GL_BGR, GL_UNSIGNED_BYTE, texture_bytes);
Matrix = Mat(texture_height, texture_width, CV_8UC3, texture_bytes);
我想知道的是,如果有人知道我应该将 glGetTexImage() 的格式和类型设置为什么以使其正常工作。另外,我应该将 Mat() 的类型设置为什么?
您可以假设上下文设置正确,并且输入的纹理是正确的。我已经通过使用 OpenGL 在屏幕上显示纹理来验证这一点。提前致谢!
【问题讨论】:
-
您目前的尝试究竟有什么问题?你根本没有得到任何数据吗?或者看起来不正确的数据?尝试调用
glGetError()以防万一,即使这些参数对我来说看起来有效。 -
当我尝试从给定纹理中获取 texture_bytes 数据时,出现了我的问题。 texture_bytes 返回空白(如“ffffffffffffffffff”)。所以是的,我根本没有得到任何数据。我很肯定数据在那里,因为纹理在 OpenGL 中渲染和显示效果很好,但它只会在 OpenCV 中给我一个灰屏。我希望这能稍微澄清一下这个问题:)
-
更正,我似乎从纹理数据中获得的唯一数据是“ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ”。