Printable Version

Frame Grabber Library


The Frame Grabber Library was a run-time image processing library written in C++. The project was commissioned in 2002 by the CEMA laboratory at Monash University. The idea behind the project was to allow real-time filtering of video streams for special effects purposes. The video was either captured by a camera, or it was played back from a video file. The library used the QuickTime SDK for decoding video files and for interfacing with the capture device.

1 Project Overview

The development of the Frame Grabber Library was under a three month contract. Not a lot of time, considering the amount of features that included in the library. In addition to development, features present in the library had to be fully documented its upon completion. The target platform for this project was Mac OS X; however, it was also tested and compiled on Windows systems.

The project utilised the QuickTime SDK for managing low-level video capture tasks. This included the handling of video compression and decompression, for capturing operating system events, setting up windows for rendering, etc. Practically all the QuickTime and operating system related routines were encapsulated in the Frame Grabber Library. This provided third party developers a convenient method for accessing video devices and services without resorting to program the QuickTime Media Layer Client module.

The library was designed to operate in two modes. In one mode, the frame grabber system allowed real-time video capture from an external video camera, connected to the FireWire port. In the other mode, the library provided facilities for playing back videos from a QuickTime movie file. Additionally, the library provided the flexibility for setting up several real-time video streams. For example, it was possible to capture video from a camera, while playing two other QuickTime movies at the same time, then it was up to the application developer how these video streams were processed.

In addition to the video capture and decoding facilities, the Frame Grabber Library provided various image filtering algorithms that operated on the video frames in real-time. Typical filters that were readily available included edge detection, box blur, subtraction, addition, multiply, masking and simple morphological filters.

The project was finalised by documenting the entire Frame Grabber Library. The documentation served as a reference manual for C++ programmers wishing to use the library.



The images below show the Frame Grabber Library in action.

Figure 1 Figure 2 Figure 3
Figure 1: Recorded video played back. Figure 2 and 3: Box blur filter in real-time.
Figure 4 Figure 5 Figure 6
Figure 4, 5 and 6: Motion detection in real-time.
Figure 7 Figure 8 Figure 9
Figure 7, 8 and 9: Edge detection.
Figure 10 Figure 11 Figure 12
Figure 10: The cross-correlation filter, registering the background. Figure 11: The cross-correlation filter, highlighting someone walking past. Figure 12: The Frame Grabber Library under Visual C++.