- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
How to pad an image on all sides in PyTorch?
To pad an image on all sides, we can apply Pad() transform provided by the torchvision.transforms module. This module contains many important transformations that can be used to perform different types of manipulations on the image data.
Pad() transformation accepts both PIL and tensor images or a batch of tensor images. A tensor image is a torch Tensor with shape [C, H, W], where C is the number of channels, H is the image height, and W is the image width.
A batch of tensor images is also a torch tensor with shape [B, C, H, W]. B is the number of images in the batch. If the image is neither a PIL image nor a tensor image, then we first convert it to a tensor image and then apply the transform.
Syntax
torchvision.transforms.Pad(padding)(img)
Parameters
Padding – Desired padding size. padding is a sequence like (l, t, r, b), where l, r, t and b are left, top, right, and bottom padding size. The padding may be a sequence of length 2. In this case, left and right padding are same and so are the top and bottom padding. If padding is an int, then the padding will be same on all sides.
It returns an image padded with the given padding size.
Steps
We could use the following steps to pad an image on all sides −
Import the required libraries. In all the following examples, the required Python libraries are torch, Pillow, and torchvision. Make sure you have already installed them.
import torch import torchvision import torchvision.transforms as transforms from PIL import Image
Read the input image. The input image is a PIL image or a torch Tensor.
img = Image.open('dove.jpg')
Define a transform to pad an image on all sides. Change the padding size according your need.
# padding same for all sides transform = transforms.Pad(50) # to pad 50 -> left/right, 100-> top/bottom transform = transforms.Pad((50,100)) # to pad 0->left, 50->top, 100-> right, 150-> bottom transform = transforms.Pad((0,50,100,150))
Apply the above-defined transform on the input image to pad the image on all sides.
img = transform(img)
Visualize the padded image
img.show()
Input Image
The following image is used as the input in all the examples.
Example 1
# Python program to pad an image on all sides # import required libraries import torch import torchvision.transforms as transforms from PIL import Image # Read the image img = Image.open('dove.jpg') # compute width and height of image width, height = img.size # define a transform to pad an image on all sides transform = transforms.Pad(50) # apply the above transform on the image img = transform(img) # resize the image to its original dimension img = img.resize((width, height)) # dispaly the image img.show()
Output
It will produce the following output −
Notice that the padding is uniform on all sides in the output image.
Example 2
# Python program to pad an image on all sides # import required libraries import torch import torchvision.transforms as transforms from PIL import Image # Read the image img = Image.open('dove.jpg') width, height = img.size # define a transform to pad an image transform = transforms.Pad([50,100]) # here 50 -> left/right, 100-> top/bottom # apply the above transforms on the image img = transform(img) # resize the image to its original dimension img = img.resize((width, height)) # dispaly the image img.show()
Output
It will produce the following output −
Notice that the padding on left and right is same. Similarly, the padding at the top and bottom is uniform.
Example 3
# Python program to pad an image on all sides # import required libraries import torch import torchvision.transforms as transforms from PIL import Image # Read the image img = Image.open('dove.jpg') width, height = img.size # define a transform to pad an image transform = transforms.Pad([0,50,100,150]) # here 0->left, 50->top, 100-> right, 150-> bottom # apply the above transforms on the image img = transform(img) # resize the image to its original dimension img = img.resize((width, height)) # display the image img.show()
It will produce the following output −
Notice that the padding in the output image is different on all sides.