我想获取 OpenGL 图像并将其提供给 OpenCV 进行分析(作为 OpenCV 算法的模拟器),但我没有找到太多关于它的信息,我能找到的只是另一种方式(放置 OpenCV OpenGL 中的图像)。有人可以解释如何这样做吗?
编辑:
我将在机器人顶部模拟摄像头,因此我将实时渲染 3D 环境并将其显示在 Qt GUI 中以供用户使用。我将为用户提供使用真实网络摄像头馈送或模拟 3D 场景(随着机器人移动而变化)的选项,并且 OpenCV 算法对于两种输入都是相同的,因此用户可以测试他的代码而无需使用真实的一直都是机器人。
最佳答案
您可能正在寻找函数 glReadPixels .它将 OpenGL 当前显示的任何内容下载到缓冲区。
unsigned char* buffer = new unsigned char[width*height*3];
glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, buffer);
cv::Mat image(height, width, CV_8UC3, buffer);
cv::imshow("Show Image", image);
对于 OpenCV,您可能还需要翻转并转换为 BGR。
编辑:由于仅使用 glReadPixels 并不是一种非常有效的方法,下面是一些使用帧缓冲区和像素缓冲区对象进行有效传输的示例代码: How to render offscreen on OpenGL?
关于c++ - OpenCV + OpenGL - 获取 OpenGL 图像作为 OpenCV 相机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554059/