65.9K
CodeProject 正在变化。 阅读更多。
Home

OpenGL 中的视频纹理

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.50/5 (11投票s)

2009年3月25日

GPL3

1分钟阅读

viewsIcon

119933

downloadIcon

8678

本文档描述了如何在 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 库。 请确保已安装它们,并且设置了指向 includelib 目录的路径。 可以从 这里 下载 OpenCV。

© . All rights reserved.