Smoothing

Smoothing, also called blurring, is a simple and frequently used image processing operation. There are many reasons for smoothing, but it is usually done to reduce noise or camera artifacts. Smoothing is also important when we wish to reduce the resolution of an image in a principled way (we will discuss this in more detail in the "Image Pyramids" section of this chapter).

OpenCV offers five different smoothing operations at this time. All of them are supported through one function, cvSmooth(),[46] which takes our desired form of smoothing as an argument.

void cvSmooth(
  const CvArr*  src,
  CvArr*        dst,
  int           smoothtype = CV_GAUSSIAN,
  int           param1     = 3,
  int           param2     = 0,
  double        param3     = 0,
  double        param4     = 0
);

The src and dst arguments are the usual source and destination for the smooth operation. The cvSmooth() function has four parameters with the particularly uninformative names of param1, param2, param3, and param4. The meaning of these parameters depends on the value of smoothtype, which may take any of the five values listed in Table 5-1.[47] (Please notice that for some values of smoothtype, "in place operation", in which src and dst indicate the same image, is not allowed.)

Table 5-1. Types of smoothing operations, meaning of their parameters, and the depth and number of channels (Nc) supported by each operation.

Smooth type

Name

In place

Nc

src depth

dst depth

Brief description

CV_BLUR

Simple blur

Yes

Any

8u, 32f

8u, 32f

Sum over a param1xparam2 neighborhood ...

Get Learning OpenCV 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.