c++ - OpenCV + OpenGL - 获取 OpenGL 图像作为 OpenCV 相机

标签 c++ opengl opencv

我想获取 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/

相关文章:

c++ - 仅使用顶点着色器进行高效渲染

c++ - C++中的默认模板参数

c++ - GTK+ 对多个小部件使用一个处理程序

c++ - Qt -C++ 可搜索 DataTable 到 DataGrid 功能?

performance - OpenGL-是否会使用多个VBO减慢渲染速度?

python - cv2.remap 或 scipy.interpolate.map_coordinates 在 Tensorflow 中的等效/实现?

c++ - 为 Qt 测试设置超时

opengl - 如何学习OpenGL 3.0?

c++ - 如何将 win32 应用程序迁移到 x64 应用程序?

c++ - Visual Studio 2012 错误 : The application was unable to start correctly (0xc0000007b)