4
Graphical User Interface
HighGUI: Portable Graphics Toolkit
The OpenCV functions that allow us to interact with the operating system, the filesystem
1
, and hardware
such as cameras are collected into a sub-library called HighGUI (which stands for “high-level graphical
user interface”). HighGUI allows us to open windows, to display images, to read and write graphics-related
files (both images and video), and to handle simple mouse, pointer, and keyboard events. We can also use it
to create other useful doodads—like sliders, for example—and then add them to our windows. If you are a
GUI guru in your window environment of choice, then you might find that much of what HighGUI offers is
redundant. Yet, even so, you might find that the benefit of cross-platform portability is itself a tempting
morsel.
From our initial perspective, the HighGUI library in OpenCV can be divided into three parts: the hardware
part, the filesystem part, and the GUI part. We will take a moment to overview what is in each part before
we really dive in.
The hardware part is primarily concerned with the operation of cameras. In most operating systems,
interaction with a camera is a tedious and painful task. HighGUI allows an easy way to query a camera and
retrieve its latest image. It hides all of the nasty stuff, and that keeps us happy.
The filesystem part is concerned primarily with loading and saving images. One nice feature of the library
is that it allows us to read video using the same methods we would use to read a camera. We can therefore
abstract ourselves away from the particular device we’re using and get on with writing interesting code. In
a similar spirit, HighGUI provides us with a (relatively) universal pair of functions to load and save still
images. These functions simply rely on the filename extension and automatically handle all of the decoding
or encoding that is necessary.
The third part of HighGUI is the window system (or GUI). The library provides some simple functions that
allow us to open a window and throw an image into that window. It also allows us to register and respond
to mouse and keyboard events on that window. These features are most useful when trying to get off of the
ground with a simple application. Tossing in some slider bars, we find ourselves able to prototype a
surprising variety of applications using only the HighGUI library. If we want to link to Qt, we can even get
a little more functionality.
2
1
Some lower level file system operations are located in the core module as well.
2
This is Qt the cross-platform widget toolkit. We will talk more about how this works later in this chapter.
Get Learning OpenCV, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.