Revision ad1ecda760d092830ea0df45846f933689aa2e4c (click the page title to view the current version)

Image Filters

A simple blurring filter.

In addition to OpenCV, we need numpy for arrays and the signal processing library from SciPy.

We need a test image which we convert to greyscale. Here we use lenna.ppm, which you have to download and place in your working directory.

Other test images can be found at the same source.

We display the image to check that everything works:

Averaging pixels

  1. Consider the following python code. What does it do?
  1. Run the python code. What does the matrix new look like?
  2. Display new as an image and compare it to the original grey. What is the visual effect?

What you should observe is a blurring effect.
Contours are smoothened by averaging a neighbourhood.

Using a signal processing library

What we did above is such a standard operation that we have an API therefore. We can define a \(7\times7\) averaging filter like this.

  • What does this look like as a matrix?

To apply the filter to the image, we can use the standard convolution operator as follows:

Note that we have to convert the result to integers explicitly, lest OpenCV will not interpret it as an image. The result can be displayed as

  • Compare the two images. What does the filter do?
  • Compare the filtered image to the image new from your manual averaging. Do they look different in any way?

The API has different methods to handle the boundaries.
We simply cropped a few pixel around the border, and thus new may be smaller than images filtered with the API.

We can do the same thing using the OpenCV library, like this.

The second argument (-1) specifies the colour depth of the output which should be the same as for the input.