Before you keep reading...
Runestone Academy can only continue if we get support from individuals like you. As a student you are well aware of the high cost of textbooks. Our mission is to provide great books to you for free, but we ask that you consider a $10 donation, more if you can or less if $10 is a burden.
Before you keep reading...
Making great stuff takes time and $$. If you appreciate the book you are reading now and want to keep quality materials free for other students please consider a donation to Runestone Academy. We ask that you consider a $10 donation, but if you can give more thats great, if $10 is too much for your budget we would be happy with whatever you can afford as a show of support.
Chapter 15 Exercises¶
Below is a selection of images that you can use in the programs in this section.
Remember that it can take a bit of time to process all the pixels in a picture! Check for errors below the code if it is taking a long time, but if you don’t see any errors just wait.
Make changes to 10 lines in the code below so that it runs. It changes areas that look red in the original to green.
fromin line 1. Add a
:at the end of line 8. Indent lines 14 - 21 four spaces to the right.
Fix the code below so that the red in the picture gets changed to blue.
Fix the indentation like below and make sure the change occurs when the red value is greater than 150 and the green and blue values are less than 100. Fix the colors of the new pixel by setting it to (0,0,b).
Fix the indention in the code below so that it runs correctly. It does a primitive form of edge detection by getting all of the pixels (except for the last row) and all the pixels to the right of those and determining if the difference between the average of the rgb values for the pixel and the pixel to the right are substantially different.
Indent lines 9 to 24 as shown below.
Fix and change the code to change just the background color from white to gray.
Fix the indentation like below and then make sure the if statement only works for r,g,b values greater than 200. Also, make sure you set the pixel to the new pixel.
Fix the indention in the code below so that it runs correctly. It posterizes a picture which means that it reduces all the colors in a picture to a small number of colors – like the ones you might use if you were making a poster..
Indent lines 17, 19, 21, 23, 25, and 27 as shown below.
Fix the indentation so that the code puts the motorcycle on the beach. The code checks if the pixel isn’t white in the first image, and if it’s not, it places that pixel in the same location on the second image.
Indent like below.
Fix 5 errors in the code below. It will copy the non-white pixels from gal1.jpg to guy1.jpg.
(on line 5. Add another
:on line 8. Add a
:on line 9. Add a
,on line 10. Add an
andon line 16.
Fix the 5 errors so that a swan in shown on a beach.
Add quotations around
getPixel(x,y). It should be
getRed. Add a colon after the if statement, and set the new pixel to
Change the code below to use
elserather than two
ifstatements per color. It posterizes an image.
Change lines 18, 22, and 26 as shown below.
Fix the indentation in the code and change it so that it edges the motorcycle but the background is black and the motorcycle edging will be white.
Fix the indentation like below and set the newPixel to be (255,255,255) if the absolute value of the difference of the averages is greater than 10. Otherwise the pixel should be (0,0,0).
Change the following code into a procedure. It posterizes an image. Be sure to call it to test it.
Define the procedure and then import the library and create the image. Pass the image to the posterize procedure.
Fix the 5 errors in the procedure so that it edges the motorcycle which means the image should only have 2 colors. The motorcycle should be one color, everything else should be the other color.
The jpg file should be in quotations. You have to change line 3 to
for x in range(img.getWidth() - 1):. Add a
:after the if statement. Take the 2 lines where you show the changed image outside of the body of both for loops.
Change the following into a procedure. It changes areas that are mostly red looking to green. Be sure to call it to test it.
Define the procedure and then import the library and create the image. Pass the image to the changeRedToGreen procedure.
The code below currently makes the picture gray. Change it so that it posterizes (reduce the number of colors) the image instead.
Set the values to the new color to 0 if the pixel color is less than 120 and 120 if it is greater than or equal to 120.
Write the code to posterize a picture but use 3 values for each color instead of 2. Use 0 if the current value is less than 85, use 85 if the value is less than 170, else use 170.
See the code in lines 16-33 for how to do this.
Fix the errors in the code and change the code to use if’s and else’s instead of just if’s.
In line 7, add a
:to the end. In line 9, it should be
getPixels(x,y). The change the image line of code should be in the body of the inner for loop. Change all the second if clauses to else clauses.
Write the code to do edge detection on a picture, but compare the curent pixel with the one below it rather than the one to the right.
See the code below. Only lines 7 trough 10 needed to change. We now loop through all the columns and all but one of rows. We compare the pixel at the current x and y to the one at the same x but y+1.
Write a procedure that takes an image as a parameter and edges it using the colors blue and white.
Define a procedure similar to the one below.
Write a procedure to remove the red on very red pixels (pixels that have a red value greater than 200 and a green and blue value of less than 100).
Define the procedure and then import the library and create the image. Pass the image to the removeVeryRed procedure.
Write a procedure that takes a picture as a parameter and converts all the red to grayscale.