Resize Image in Python

  1. Use the opencv module to resize images in Python
  2. Use the scikit-image module to resize images in Python
  3. Create a user-defined function to resize images in Python

In this tutorial, we will discuss how to resize an image.

Essentially, we will resize the size of the numpy array, which represents an image. There is no direct functionality in the numpy module to achieve this. We cannot directly use the resize() function because it disregards the axis and does not apply interpolation or extrapolation.

Note that after resizing, we can export this resized array and save it as an image. This is common for all the methods discussed below

Use the opencv module to resize images in Python

The OpenCV module is widely used in Python for image processing and computer vision. To resize an image, we will first read the image using the imread() function and resize it using the resize() function as shown below.

import cv2
import numpy as np

img = cv2.imread('filename.jpeg')
res = cv2.resize(img, dsize=(54, 140), interpolation=cv2.INTER_CUBIC)

The imread() returns an array that stores the image. We resize it with the resize() function. An important aspect here is the interpolation parameter, which essentially tells how to resize an image. There are several ways to resize the image like INTER_NEAREST, INTER_LINEAR, and more. There is no best way to select this parameter; it differs from situation to situation.

Use the scikit-image module to resize images in Python

This module is built on the numpy library and has the resize() function, which can effectively resize images. It can work on a variety of channels while taking care of interpolation, anti-aliasing, etc.

The following code shows how to use this function.

from skimage.transform import resize
import matplotlib.pyplot as plt

im = plt.imread('filename.jpeg')
res = resize(im, (140, 54))

Note that we use the matplotlib.pyplot.imread() function to read the image in the above method. It can be substituted with any method of your preference.

Create a user-defined function to resize images in Python

We can also create our own function to achieve resizing in Python. It should be noted that this method is a basic resizing function, independent of any libraries, and will not perform interpolation, anti-aliasing as the above methods will.

The following code demonstrates this function.

def scale(im, nR, nC):
    number_rows = len(im)     # source number of rows 
    number_columns = len(im[0])  # source number of columns 
    return [[ im[int(number_rows * r / nR)][int(number_columns * c / nC)]  
                 for c in range(nC)] for r in range(nR)]

import matplotlib.pyplot as plt

im = plt.imread('filename.jpeg')
res = scale(im, 30, 30)
Contribute
DelftStack is a collective effort contributed by software geeks like you. If you like the article and would like to contribute to DelftStack by writing paid articles, you can check the write for us page.

Related Article - Python Image

  • Convert Image to Grayscale in Python