# Activity 5: More advanced filters

Workshop Resources

In the last section, we saw an example of creating a blue filter and thought about how to create the grey filter. Now, let us create our grey filter together.

### Example - Create a grey filter

Let us change the original cat image below with our grey filter together!

# We need to import PIL package to allow manipulation with pixels.
from PIL import Image

# Open the cat image
img = Image.open("cat.png")

# Grey filters
for i in range(img.size[0]): # For every col:
for j in range(img.size[1]): # For every row
color = img.getpixel( (i,j)) # Get color
GREY = (color[0] + color[1] + color[2]) // 3 # Average the pixel values
img.putpixel((i,j),(GREY, GREY, GREY)) # Set the color accordingly

# Save the cat after filtering
img.save("Mycat.png")


Wow! This is our cat after the grey filter.

### Example - Partial filter

Now, let us think about how to add filter on only part of our lovely cat.

# We need to import PIL package to allow manipulation with pixels.
from PIL import Image

# Open the cat image
img = Image.open("cat.png")

# Grey filters
for i in range((img.size[0] // 2)): # For first-half columns
for j in range((img.size[1] // 2)): # For first-half rows
color = img.getpixel((i,j)) # Get color
GREY = (color[0] + color[1] + color[2]) // 3 # Average the pixel values
img.putpixel((i,j),(GREY, GREY, GREY)) # Set the colour accordingly

#Save the cat after filtering
img.save("Mycat.png")


Wow! This is our cat after the filter. We only filtered one-forth of the cat on the upper left corner！

### Challenge - Create your own partial filter

It’s now your turn to filter whichever part you want with different kinds of filters on the cute cat! Exciting！

Wouldn’t it be nice if we could take the steps above and make it simpler? Let’s do this by using the Pillow ImageFilter function filter() & convert().

To use the filter() function, you can specify the ImageFilter type within the parentheses. For example, image.filter(ImageFilter.BLUR) will make the image blurry. Or, if you use ImageFilter.CONTOUR instead, it will add a ‘sketch’ type effect to your image.

For example, for the ‘img’ above:

    blurredImage = img.filter(ImageFilter.BLUR)
blurredImage.save("myCatBlurred.jpg")


You should see the saved cat image is blurred. Try this with a few other image filters until you find one you like!

Additionally, we can use the convert() function to set our image to black & white. To use this function, you can specify the mode you want to convert your image to. The most common ones are “L”, which converts an image to greyscale, and “RGB” which converts an image to its true color.

Let’s try it out like this:

    greyscaleImage = img.convert("L")
greyscaleImage.save("myCatBW.jpg")


If you combine the blurred function and the black and white convert function, you’ll get something like this – purrfect!