Homework 31
Due Thursday December 5
Module mash.py
- Supports the creation of a new image that is a mash up of two existing images —
bg
andfg
. The new image hasbg
as its background. The pixels infg
that are dissimilar to the back screen color are copied on top of the background.
Downloads
- Module mash.py
- Tester smashing.py
- Used by module
mash
for some simple holistic testing of its capabilities.
Primary function (already written)
combine( bg, fg, sx, sy, back_screen )
- Returns mash up of background image
bg
and foreground imagefg
, where the pixels infg
that are dissimilar toback_screen
are copied on top of the background.
- The mash up uses location
(sx, sy)
as the spot in the background to start the overlay offg
.
def combine( bg, fg, sx, sy, back_screen ) :
bw, bh = bg.size # size of background image
fw, fh = fg.size # size of foreground image
copy = bg.copy() # get a copy of background image
new_image = copy.convert( 'RGB' ) # to be the basis of new image
for fx in range( 0, fw ) : # consider every (fx, fy)
for fy in range( 0, fh ): # possibility of the new image
fspot = ( fx, fy ) # name spot (fx, fy )
fpixel = fg.getpixel( fspot ) # get the pixel at fspot
nx = sx + fx # determine spot on new image
ny = sy + fy # to paint fpixel
nspot = ( nx, ny )
# check whether fpixel should be painted on new image at nspot
if ( colorable( nspot, new_image, fpixel, back_screen ) ) :
new_image.putpixel( nspot, fpixel )
return new_image # return the mash up
Helpful constant (already defined)
SIMILARITY_THRESHOLD = 85
- Usage: values
v1
andv2
are considered similar if the difference betweenv1
andv2
is less thanSIMILARITY_THRESHOLD
.
- Note: the difference between values
v1
andv2
is the absolute value ofv1
-
v2
.
Functions to be written
distance( p1, p2 )
- Returns the the sum of RGB differences between colors
p1
andp2
. That is, the sum of thep1
andp2
red-level difference, green-level difference, and blue-level difference.
similar( p1, p2 )
- Returns
True
if the distance between pixelsp1
andp2
is less than similarity threshold; otherwise, returnsFalse
.
is_background( p, back_screen )
- Returns
True
ifp
is similar to theback_screen
color; otherwise, returnsFalse
.
inbounds( spot, img )
- Returns
True
ifspot
lies onimg
; otherwise, returnsFalse
. That is it returns whether the x-value and y-value forspot
are nonnegative, thespot
x-value is less thanimg
width, and thespot
y-value is less thanimg
height.
colorable( spot, img, p, back_screen )
- Returns
True
if bothspot
is a location onimg
(i.e., inbounds) and colorp
is not similar to colorback_screen
; otherwise, returnsFalse
.
© 2019 Jim Cohoon | Resources from previous semesters are available. |