Cropping an Image
I had a picture of my dog that I wanted to trim down a bit. The picture itself had width 400 and height 553.
from IPython.display import Image
Image('images/daisy.jpg')Using PIL
Load in the image
from PIL import Image
im = Image.open('images/daisy.jpg')
im
Inspecting the docstring for im.crop() had me scratching my head a bit
Returns a rectangular region from this image. The box is a
4-tuple defining the left, upper, right, and lower pixel
coordinate.
But then I realized that this was looking for 4 values that make up two cooridinates:
- The first two are the upper-left corner of the box I want
- The last two are the bottom-right corner
It figures out where to place the upper-right and bottom-left accordingly.
Finally, since the image array has values (0, 0) in the upper-left corner of the image, and is positive in both dimensions toward the bottom-right, I played around a bit to find the right values that got me my pooch.
im.crop((100, 100, 300, 325))
Using cv2
Again, because cv2 means you should think numpy, we’ll use array slicing to do our cropping.
Conveniently, this also follows the same numerical design as PIL with (0, 0) in the upper-left, axis-0 as height, and axis-1 as width.
import cv2
im = cv2.imread('images/daisy.jpg')
cropped = im[100:325, 100:300]%pylab inline
plt.imshow(cropped)
plt.axis('off');Populating the interactive namespace from numpy and matplotlib
