OpenGL 中的视频纹理






2.50/5 (11投票s)
本文档描述了如何在 OpenGL 中从网络摄像头或视频文件中的实时视频流创建纹理。
引言
这个简单的程序展示了如何将来自网络摄像头(或视频文件)的实时视频流在 OpenGL 中渲染为纹理。 实时视频流是使用开源计算机视觉库 (OpenCV) 捕获的。 该程序还展示了如何将 OpenCV 图像转换为 OpenGL 纹理。 此代码可以用作使用 OpenCV 和 OpenGL 开发增强现实应用程序的第一步。
理解代码
该程序渲染一个 OpenGL 纹理四边形,显示实时视频流。 代码不包含任何其他功能,并且为了易于理解而保持非常简单。
OpenGL 纹理在 OnIdle
回调函数中持续创建。 首先捕获视频流中的下一个可用帧
IplImage *image = cvQueryFrame(g_Capture);
图像存储在 OpenCV 数据结构 IplImage
中。 请参阅 OpenCV 文档以获取详细信息。 OpenCV 捕获的图像存储为 BGR
格式。 首先使用 OpenCV 函数 cvCvtColor
将其转换为 RGB
格式。
cvCvtColor(image, image, CV_BGR2RGB);
然后,以下神奇的调用从 OpenCV 图像创建 2D OpenGL 纹理
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, image->width, image->height,
GL_RGB, GL_UNSIGNED_BYTE, image->imageData);
纹理加载到内存中,可用于渲染。
编译和运行
该代码使用 Microsoft Visual Studio 2008 编译和测试。 但是,可以使用任何 C++ 编译器在任何平台上进行编译。 该程序使用 OpenGL、GLUT 和 OpenCV 库。 请确保已安装它们,并且设置了指向 include 和 lib 目录的路径。 可以从 这里 下载 OpenCV。