Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
D. Thiebaut, Computer Science, Smith College
Next Few Lectures
• Image Processing with Nested For-Loops
• Lists can be Used to Solve Many Problems (Chap. 11)
• Class Inheritance
D. Thiebaut, Computer Science, Smith College
Image Geometry & Coordinate System
Scanning Images using Nested For-Loops
Sweep
How RGB Works
Python Code for Image Processing
Demo
D. Thiebaut, Computer Science, Smith College
Image Processing
D. Thiebaut, Computer Science, Smith College
• Different image types: jpg, png, gif, eps, svg, tiff, etc.
• Zelle graphics.py library compatible with gif images only.
• Jpg and png files can be converted to gif using Web services (e.g. http://image.online-convert.com/convert-to-gif)
D. Thiebaut, Computer Science, Smith College
Image Geometry
width
height
309 pixels × 163 pixels ~50K pixels
D. Thiebaut, Computer Science, Smith College
width
height
309 pixels × 163 pixels ~50K pixels
0 1 2 3 4 5 6 70 1 2 3 4
307 308
307 308
161 162
0 1 2 3 4
161 162
0 1 2 3 4 5 6 7
Image Geometry
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 70 1 2 3 4
307 308
307 308
161 162
0 1 2 3 4
0, 4308, 4
307, 162
161 162
0 1 2 3 4 5 6 7
Image Geometry
D. Thiebaut, Computer Science, Smith College
Image Geometry & Coordinate System
Scanning Images using Nested For-Loops
Sweep
How RGB Works
Python Code for Image Processing
Demo
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4
Change all the pixels to red
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( WIDTH ): for y in range( HEIGHT ): makePixelRed( x, y )
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
(Use numbers: easier to understand)
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=0
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=0
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=0
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=1
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=1
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=2
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=2
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=3
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=3
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=4
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=4
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=0y=
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=1y=
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=1y=0
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=1y=0
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
x=1y=01234
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for x in range( 8 ): for y in range( 5 ): makePixelRed( x, y )
D. Thiebaut, Computer Science, Smith College
Switching the Loops
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for y in range( 5 ): for x in range( 8 ): makePixelRed( x, y )
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for y in range( 5 ): for x in range( 8 ): makePixelRed( x, y )
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for y in range( 5 ): for x in range( 8 ): makePixelRed( x, y )
y=0x=0
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for y in range( 5 ): for x in range( 8 ): makePixelRed( x, y )
x=01234567y=0
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for y in range( 5 ): for x in range( 8 ): makePixelRed( x, y )
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for y in range( 5 ): for x in range( 8 ): makePixelRed( x, y )
D. Thiebaut, Computer Science, Smith College
Image Geometry & Coordinate System
Scanning Images using Nested For-Loops
Sweep
How RGB Works
Python Code for Image Processing
Demo
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for y in range( 5 ): for x in range( 8 ): makePixelRed( x, y )
sweep
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for y in range( ? ): for x in range( ? ): makePixelRed( x, y )
sweep ?
D. Thiebaut, Computer Science, Smith College
0 1 2 3 4 5 6 7
0 1 2 3 4 WIDTH = 8
HEIGHT = 5
for y in range( 4, -1, -1 ): for x in range( 8 ): makePixelRed( x, y )
sweep!
D. Thiebaut, Computer Science, Smith College
Image Geometry & Coordinate System
Scanning Images using Nested For-Loops
Sweep
How RGB Works
Python Code for Image Processing
Demo
D. Thiebaut, Computer Science, Smith College
How RGB Works
pixel
D. Thiebaut, Computer Science, Smith College
pixel
0-255
Red Green Blue0-255 0-255
RGB System
How RGB Works
D. Thiebaut, Computer Science, Smith College
pixel
255
Red Green Blue0 0
RGB System
How RGB Works
D. Thiebaut, Computer Science, Smith College
pixel
255
Red Green Blue0 0
RGB System
How RGB Works
D. Thiebaut, Computer Science, Smith College
pixel
0
Red Green Blue255 0
RGB System
How RGB Works
D. Thiebaut, Computer Science, Smith College
pixel
0
Red Green Blue255 0
RGB System
How RGB Works
D. Thiebaut, Computer Science, Smith College
pixel
0
Red Green Blue0 255
RGB System
How RGB Works
D. Thiebaut, Computer Science, Smith College
pixel
0
Red Green Blue0 255
RGB System
How RGB Works
D. Thiebaut, Computer Science, Smith College
pixel
51
Red Green Blue255 255
RGB System
How RGB Works
D. Thiebaut, Computer Science, Smith College
pixel
51
Red Green Blue255 255
RGB System
http://www.rapidtables.com/web/color/RGB_Color.htm
How RGB Works
D. Thiebaut, Computer Science, Smith College
pixel at x, y
51
Red Green Blue255 255
red, green, blue = cat.getPixel( x, y )
How RGB Works
D. Thiebaut, Computer Science, Smith College
pixel at x, y
51
Red Green Blue255 255
# create color red color = color_rgb( 255, 0, 0 )
# set pixel at x, y to red cat.setPixel( x, y, color )
How RGB Works
D. Thiebaut, Computer Science, Smith College
pixel at x, y
255
Red Green Blue0 0
# create color red color = color_rgb( 255, 0, 0 )
# set pixel at x, y to red cat.setPixel( x, y, color )
How RGB Works
D. Thiebaut, Computer Science, Smith College
Why 255?
D. Thiebaut, Computer Science, Smith College
1 bit
0 1 0 - 1
binary decimal
D. Thiebaut, Computer Science, Smith College
2 bits
00 01 10 11
0 - 3
binary decimal
22 = 4
D. Thiebaut, Computer Science, Smith College
3 bits
000 001 010 011 100 101 110 111
0 - 7
binary decimal
23 = 8
D. Thiebaut, Computer Science, Smith College
4 bits
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
0 - 15
binary decimal
24 = 16
D. Thiebaut, Computer Science, Smith College
8 bits = byte
00000000 00000001 00000010 00000011 00000100 00000101 00000110
. . . 11111000 11111001 11111010 11111011 11111100 11111101 11111110 11111111
0 - 255
binary decimal
28 = 256
D. Thiebaut, Computer Science, Smith College
8 bits = byte
00000000 00000001 00000010 00000011 00000100 00000101 00000110
. . . 11111000 11111001 11111010 11111011 11111100 11111101 11111110 11111111
0 - 255
binary decimal
51
Red Green Blue255 255
1 pixel = 3 bytes
D. Thiebaut, Computer Science, Smith College
8 bits = byte
00000000 00000001 00000010 00000011 00000100 00000101 00000110
. . . 11111000 11111001 11111010 11111011 11111100 11111101 11111110 11111111
0 - 255
binary decimal
51 255 255
1 pixel = 3 bytes
256 x 256 x 256 = 16,777,216 colors
Red Green Blue
D. Thiebaut, Computer Science, Smith College
Special Colors
255 255 255
0 0 0
101 101 101
Red Green Blue
Red Green Blue
Red Green Blue
D. Thiebaut, Computer Science, Smith College
Image Geometry & Coordinate System
Scanning Images using Nested For-Loops
Sweep
How RGB Works
Python Code for Image Processing
Demo
D. Thiebaut, Computer Science, Smith College
Zelle's Graphics Libraryand Images
http://mcsp.wartburg.edu/zelle/python/graphics/graphics/node12.html
D. Thiebaut, Computer Science, Smith College
Drawing an Image
D. Thiebaut, Computer Science, Smith College
Processing Pixels of an Image
D. Thiebaut, Computer Science, Smith College
Demo Time!
D. Thiebaut, Computer Science, Smith College
Transformations to Try
• Modify RED component
• Saturate
• Draw a horizontal line (beginning of a border)
D. Thiebaut, Computer Science, Smith College
We stopped here last time…
D. Thiebaut, Computer Science, Smith College
Mirroring an Image
Displaying a Checker Board
8x8 Grid
Alternating Colors
Creating a Class for a Checkers Piece
Using a Gif Image for a Piece
D. Thiebaut, Computer Science, Smith College
Transformations to Try• Mirror top half of cat image
D. Thiebaut, Computer Science, Smith College
x=398, y=0
x=398, y=417
418
D. Thiebaut, Computer Science, Smith College
x=398, y=0
x=398, y=417
418
x=398, y=1
x=398, y=416
D. Thiebaut, Computer Science, Smith College
x=398, y=0
x=398, y=417
418
x=398, y=1
x=398, y=416
x=398, y=208x=398, y=209
D. Thiebaut, Computer Science, Smith College
x=398, y=0
x=398, y=417
418
x=398, y=1
x=398, y=416
x=398, y=208x=398, y=209
Observation 1: y_source + y_destination = 417, always
D. Thiebaut, Computer Science, Smith College
x=398, y=0
x=398, y=417
418
x=398, y=1
x=398, y=416
x=398, y=208x=398, y=209
Observation 2: 417 = image height - 1
D. Thiebaut, Computer Science, Smith College
Mirroring an Image
Displaying a Checker Board
8x8 Grid
Alternating Colors
Creating a Class for a Checkers Piece
Using a Gif Image for a Piece
D. Thiebaut, Computer Science, Smith College
Graphic Problem of the Day:
“Playing” Checkers
Image credit: http://www.freeimageslive.co.uk/free_stock_image/checkersjpg
D. Thiebaut, Computer Science, Smith College
Problems to Solve:• Display 8x8 board with alternating colors
• Generate the graphics for a piece (white and black circular shapes)
• Display the board with the black and white pieces
• Spiffy it up with real images
D. Thiebaut, Computer Science, Smith College
Display 8x8 Board
D. Thiebaut, Computer Science, Smith College
i=0 1 2 3 4 5 6 7j=0 1
2 3 4 5 6 7
600pxside = 600/8 =75 px
D. Thiebaut, Computer Science, Smith College
i=0 1 2 3 4 5 6 7j=0 1
2 3 4 5 6 7
600px
p1
p2
side = 600/8 =75 px
D. Thiebaut, Computer Science, Smith College
i=0 1 2 3 4 5 6 7j=0 1
2 3 4 5 6 7
600px
p1
p2
# i is 0, j is 0
p1 = Point( ?, ? ) p2 = Point( ?, ? )
rect = Rectangle( p1, p2 ) rect.setFill( “green” ) rect.draw( win )
side = 600/8 =75 px
D. Thiebaut, Computer Science, Smith College
i=0 1 2 3 4 5 6 7j=0 1
2 3 4 5 6 7
600px
p1
p2
# i is 1, j is 2
p1 = Point( ?, ? ) p2 = Point( ?, ? )
rect = Rectangle( p1, p2 ) rect.setFill( “green” ) rect.draw( win )
side = 600/8 =75 px
D. Thiebaut, Computer Science, Smith College
i=0 1 2 3 4 5 6 7j=0 1
2 3 4 5 6 7
600pxside = 600/8 =75 px
p1
p2
# i is 1, j is 2x = i * side y = j * side p1 = Point( x, y ) p2 = Point( x+side, y+side )
rect = Rectangle( p1, p2 ) rect.setFill( “green” ) rect.draw( win )
D. Thiebaut, Computer Science, Smith College
i=0 1 2 3 4 5 6 7j=0 1
2 3 4 5 6 7
600pxside = 600/8 =75 px
for i in range( 8 ): for j in range( 8 ):
x = i * side y = j * side p1 = Point( x, y ) p2 = Point( x+side, y+side )
rect = Rectangle( p1, p2 ) rect.setFill( “green” ) rect.draw( win )
p1
p2
D. Thiebaut, Computer Science, Smith College
i=0 1 2 3 4 5 6 7j=0 1
2 3 4 5 6 7
600pxside = 600/8 =75 px
for i in range( 8 ): for j in range( 8 ):
x = i * side y = j * side p1 = Point( x, y ) p2 = Point( x+side, y+side )
rect = Rectangle( p1, p2 ) rect.setFill( “green” ) rect.draw( win )
p1
p2
For fun, replace with: color_rgb( i*j, 255-i*j, (i+j)*10 )
D. Thiebaut, Computer Science, Smith College
Mirroring an Image
Displaying a Checker Board
8x8 Grid
Alternating Colors
Creating a Class for a Checkers Piece
Using a Gif Image for a Piece
D. Thiebaut, Computer Science, Smith College
Alternating Black
and White Cells
i - j
D. Thiebaut, Computer Science, Smith College
Alternating Black
and White Cells
i - j
D. Thiebaut, Computer Science, Smith College
Mirroring an Image
Displaying a Checker Board
8x8 Grid
Alternating Colors
Creating a Class for a Checkers Piece
Using a Gif Image for a Piece
D. Thiebaut, Computer Science, Smith College
Checkers on Board
D. Thiebaut, Computer Science, Smith College
Checkers on Board
D. Thiebaut, Computer Science, Smith College
Mirroring an Image
Displaying a Checker Board
8x8 Grid
Alternating Colors
Creating a Class for a Checkers Piece
Using a Gif Image for a Piece
D. Thiebaut, Computer Science, Smith College
Using an Image
http://pixgood.com/checkers-pieces-clip-art.html
copy
Resize Convert to gif
D. Thiebaut, Computer Science, Smith College
Using an Image
http://pixgood.com/checkers-pieces-clip-art.html
copy
Resize Convert to gif ?
D. Thiebaut, Computer Science, Smith College
D. Thiebaut, Computer Science, Smith College
D. Thiebaut, Computer Science, Smith College
We stopped here last time…
D. Thiebaut, Computer Science, Smith College
Review Wheel, Car, Checkers
Checkers: Animation Loop & Interactivity
A Virtual Aquarium
D. Thiebaut, Computer Science, Smith College
Review Wheel & Car Classes
http://cs.smith.edu/dftwiki/index.php/CSC111_Programs_for_Week_9_2015#wheel1.py
D. Thiebaut, Computer Science, Smith College
Review DisplayCheckers.py
In “Programs for Week 10” page…
D. Thiebaut, Computer Science, Smith College
Review Wheel, Car, Checkers
Checkers: Animation Loop & Interactivity
A Virtual Aquarium
D. Thiebaut, Computer Science, Smith College
Building an Animation Loop
Adding Interactivity
D. Thiebaut, Computer Science, Smith College
RemovingCheckers
with the Mouse
D. Thiebaut, Computer Science, Smith College
MovingCheckers
with the Mouse
D. Thiebaut, Computer Science, Smith College
Virtual Aquarium
D. Thiebaut, Computer Science, Smith College
D. Thiebaut, Computer Science, Smith College