Section #2: Nested Loops and Images

June 28th, 2021


Written by Nick Parlante and Juliette Woodrow

Image Range-Loop Problems

You might find nested y,x range loops helpful in solving these. Problems like this are well suited to making a drawing first to think through the algorithm before coding, and especially to get the arithmetic for each coordinate exactly right. These algorithms are a magnet for off-by-one errors.

A good first step, as in lecture, is to sketch out the pixel grid x,y coordinates as in lecture to plan how your algorithm will access the pixels.

An empty grid with a width of 100 and a height 50

Understanding Nested For Loops

What does this code print?


  for i in range(2):
    for j in range(4):
      print(i, j)
  
        

Aqua Bars

In this problem, your job is to write a function aqua_bars(filename, bar_height) which takes as input a filename of an image and an integer bar height. In the function, create a new out image tall enough to hold a copy of the original image, plus extra space at the top and bottom for horizontal, aqua colored bars. Each bar should have have the height given in the bar_height parameter. A white pixel can be changed to aqua by setting its red value to 0. Return the out image when done.

Aqua Bars Code

Here is an example run of the function for the image 'yotter-100.jpg' shown below:

Input Image:

A stuffed yotter with no border on the top or bottom of the image

aqua_bars('yotter-100.jpg', 5)

Output Image:

A stuffed yotter with an aqua border on the top and bottom of the image


Up1

In this probelm your job is to define a function, make_up1(filename) which creates an out image 100 pixels wider than the original but the same height and copies a vertically-flipped version of the original image to the out image, leaving a 50 pixel wide margin at the left and right sides untouched (white). At the end of the function return the out image.

Up1 Code

Here is an example run of the function for the image 'poppy-200.jpg' show below:

Input Image:

An orange poppy

make_up1('poppy-200.jpg')

Output Image:

An upside down poppy flower with a 50 pixel white border on the left and right side of the image.

Here is some artwork to help you visualize how the coordinates change:
A drawing of coordinates for how to flip the original image into the output image


Up2

This problem starts with the code for up1 already done. Add code to paint the two margin areas purple by setting the green value of every pixel to 0. This can be done by adding a second for/y/x nested loop after the first. Optional: Solving with a second for/y/x loop is fine. However, the for/y part is not actually required. The code can position the second for/x loop inside the existing "up1" for/y loop. Get the code working first, then try deleting the second for/y loop to see it work. Return the out image.

Up2 Code

Here is an example run of the function for the image 'poppy-200.jpg' show below:

Input Image:

An orange poppy

make_up2('poppy-200.jpg')

Output Image:

An upside down poppy flower with a 50 pixel magenta border on the left and right side of the image.