Comparing colors using the strategy design pattern

Let's suppose that we want to build a simple algorithm that will identify all of the pixels in an image that have a given color. For this, the algorithm has to accept an image and a color as input and return a binary image showing the pixels that have the specified color. The tolerance with which we want to accept a color will be another parameter to be specified before running the algorithm.

In order to accomplish this objective, this recipe will use the strategy design pattern. This object-oriented design pattern constitutes an excellent way of encapsulating an algorithm in a class. It is easier than replacing a given algorithm with another one or chaining several algorithms together in order to build a more complex process. In addition, this pattern facilitates the deployment of an algorithm by hiding as much of its complexity as possible behind an intuitive programming interface.