Exercises for Lesson 12
Exercise 1: Colors
Part a: Guessing colors
For each (r,g,b) triple below, what color do you expect to see?
(i) (255, 0, 0)
(ii) (0, 255, 255)
(iii) (120, 0, 120)
(iv) (255, 128, 0)
Part b: Creating colors
For each color name below, give an (r,g,b) triple that would be close to that color.
(i) yellow
(ii) medium gray
(iii) salmon
(iv) forest green
Exercise 2: Creating an image
Write a function that generates (and returns) a 400x200 image with one randomly-chosen color per row. To do this, fill in createRandomRowImage
in the program below.
from graphics import *
import random
def chooseColor():
"""
Randomly chooses a color
return: the color (using color_rgb)
"""
r = random.randint(0,255)
g = random.randint(0,255)
b = random.randint(0,255)
return color_rgb(r, g, b)
def createRandomRowImage():
"""
Creates a 400x200 image and assigns each row a random color.
returns: the random-row image
"""
# Generate a blank 400x200 image (not starting from a file)
image = Image(Point(0,0), 400, 200)
return None # replace with your code
def main():
# Create the random-row image
image = createRandomRowImage()
width = image.getWidth()
height = image.getHeight()
# Create the window
win = GraphWin("Image Processing", width, height)
# Draw the image
image.move(width/2, height/2)
image.draw(win)
if __name__ == "__main__":
main()
Exercise 3: Getting image colors
Complete the following program to report the pixel color where a user clicked on an image, until the user has clicked ten times.
from graphics import *
def reportClick(image, p):
"""
Prints out the location and color where the user clicked on the image.
image: an Image
p: the Point where the user clicked
"""
pass # TODO: replace with your code
def main():
# Load the image
image = Image(Point(0,0), "cheddar_sleep.gif")
width = image.getWidth()
height = image.getHeight()
# Create the window
win = GraphWin("Image Processing", width, height)
# Draw the image
image.move(width/2, height/2)
image.draw(win)
# Report the color and location of ten user clicks
for i in range(10):
p = win.getMouse()
reportClick(image, p)
# Exit after one more click
win.getMouse()
win.close()
if __name__ == "__main__":
main()
When you run this and click on an image, you should get output like the following:
Click (x=373, y=260): r=102, g=85, b=51.
Exercise 4: Grayscale based on human perception
We can choose the grayscale value for a pixel using the following calculation:
Y = 0.2126 * R + 0.7152 * G + 0.0722 * B
Fill in the following program. It should compute Y for each pixel, and color that pixel (Y,Y,Y) instead.
from graphics import *
def getGrayscaleColor(r, g, b):
"""
Converts the pixel to grayscale using the formula
Y = 0.2126*r + 0.7152*g + 0.0722*b.
r: the red channel (int in the range 0 to 255)
g: the green channel (int in the range 0 to 255)
b: the blue channel (int in the range 0 to 255)
returns: the result of color_rgb (int in the range 0 to 255)
"""
return None # replace with your code
def createGrayscaleImage(origImage):
"""
Creates a copy of the original image, and colors it grayscale.
origImage: the original image (graphics.py Image object)
returns: the grayscale image
"""
return None # replace with your code
def main():
# Load the original image
image = Image(Point(0,0), "cheddar_sleep.gif")
width = image.getWidth()
height = image.getHeight()
# Create the window to display both images
win = GraphWin("Image Processing", width*2, height)
# Draw the original image
image.move(width/2, height/2)
image.draw(win)
# Create the grayscale image
grayscaleImage = createGrayscaleImage(image)
grayscaleImage.move(width, 0)
grayscaleImage.draw(win)
# Exit after the user clicks
win.getMouse()
win.close()
if __name__ == "__main__":
main()