Crop an image in the centre using PIL

后端 未结 7 1231
闹比i
闹比i 2021-01-31 03:41

How can I crop an image in the center? Because I know that the box is a 4-tuple defining the left, upper, right, and lower pixel coordinate but I don\'t know how to get these co

7条回答
  •  北恋
    北恋 (楼主)
    2021-01-31 04:12

    I feel like the simplest solution that is most suitable for most applications is still missing. The accepted answer has an issue with uneven pixels and especially for ML algorithms, the pixel count of the cropped image is paramount.

    In the following example, I would like to crop an image to 224/100, from the center. I do not care if the pixels are shifted to the left or right by 0.5, as long as the output picture will always be of the defined dimensions. It avoids the reliance on math.*.

    from PIL import Image
    import matplotlib.pyplot as plt
    
    
    im = Image.open("test.jpg")
    left = int(im.size[0]/2-224/2)
    upper = int(im.size[1]/2-100/2)
    right = left +224
    lower = upper + 100
    
    im_cropped = im.crop((left, upper,right,lower))
    print(im_cropped.size)
    plt.imshow(np.asarray(im_cropped))
    

    The output is before cropping (not shown in code):

    after:

    The touples show the dimensions.

提交回复
热议问题