Introduction

This short program shows how a live video stream from a web cam (or from a video file) can be rendered in OpenGL as a texture. The live video stream is captured using the Open Source Computer Vision library (OpenCV). The program also shows how an OpenCV image can be converted into OpenGL texture. This code can be used as the first step in the development of an Augmented Reality application using OpenCV and OpenGL.

Understanding the Code

The program renders an OpenGL textured quad which shows a live video stream. The code does not contain any additional functionality, and is kept very simple for easy understanding.

The OpenGL texture is continuously created in the OnIdle callback function. The next available frame in the video stream is captured first:

IplImage *image = cvQueryFrame(g_Capture);

The image is stored in the OpenCV data structure IplImage. Please see the OpenCV documentation for details. The image captured by OpenCV is stored as a BGR. It is first converted to RGB using the OpenCV function cvCvtColor.

cvCvtColor(image, image, CV_BGR2RGB);

Then, the following magic call creates a 2D OpenGL texture from the OpenCV image:

Compiling and Running

The code is compiled and tested using Microsoft Visual Studio 2008. However, it can be compiled using any C++ compiler on any platform. The program uses the OpenGL, GLUT, and OpenCV libraries. Please make sure that you have installed them and paths to the include and lib directories are set. OpenCV can be downloaded from here.

Thanks for the NeHe link, its very useful lesson on this topic. However, the purpose of this article was to present the simplest program for those who are working with OpenCV and have hard time to convert IplImage into OpenGL texture.

According to your answer change the title of your submission to "IPLimage to OpenGL texture with OpenCV". And even in this case you can with very little change have it also working with Direct3D ( DirectX9) as at this level of generality it's same policy (buffer image to texture). I maintain my 1 : your contribution is not realy interesting for Video texture with OpenGL as announced.
SRSR