Web Performance Exploring Video Hosting The Art of Compromise: How Lossy Compression Works Understanding the ‘Image Loading Error’: Comprehensive Guide A Comprehensive Guide to Resizing Images on iOS VBR vs CBR: Understanding Bitrate for Optimal Media Handling Displaying Images with Python’s Top 5 Image Libraries 4 Ways to Add Images to GitHub README + 1 Bonus Method Converting Images with Python JavaScript Image Optimization Techniques Building an Image Picker in React with react-native-image-crop-picker 6 Ways to Save Images in Python 5 Ways to Import Images in React + Bonus Automation Method Extract Text from Images in Python with Pillow and pytesseract Downloading Image from URL in Python: 5 Ways with Code Examples Image.open Python Function: Syntax and Quick Tutorial Complete Guide to Video SEO & Automating It With Cloudinary A Complete Guide To Website Image Optimization Video Encoding: How It Works, Formats & Best Practices The Developer’s Guide to PDFs Integrating Cloudinary With Gatsby For Image Optimization Mastering Image Optimization With Netlify And Cloudinary Seamlessly Integrate Cloudinary With Netlify For Optimised Website Assets Ultimate Guide to Asset Optimization Using Cloudinary and Netlify Adding Video To Magento Understanding Magento Media Adding a Video Widget to Your Website: What You Need to Know SDR vs. HDR: Differences and 5 Considerations for Content Creators Audio Manipulation In PHP Image Management Systems: Key Capabilities and Best Practices Video CDN: Why You Need It and Top 5 Video CDNs Video Optimization: Why You Need It and 5 Critical Best Practices Multi CDN: 8 Amazing Benefits, Methods, and Best Practices What Is an Optimized Website and 6 Ways to Optimize Yours Understanding Image Hosting for Websites Sprite Generation with CSS and 4 Automated Tools 8 Image SEO Optimization Tips to Improve Your Search Rankings Website Speed: 5 Reasons Your Site is Slow and How to Fix It Web Performance: What is it, Trends and Insights for 2024

Displaying Images with Python’s Top 5 Image Libraries

Python Image Display

Importance of Displaying Images in Python Applications

There are many reasons you might display images in Python applications. For example:

  • In an application that requires image processing, the ability to display these images at various stages of processing helps developers debug and improve their algorithms.
  • In the field of data science and machine learning, Python is extensively used for tasks like image recognition and object detection. Here, the ability to display images is not a core part of the application, which allows developers to visualize the output of their models and make necessary adjustments.
  • In web development, a key aspect of creating user-friendly applications is the ability to handle and display images efficiently.

Displaying images in Python is straightforward, but the process is slightly different depending on the image processing library you are using. We’ll review the most common options.

This is part of a series of articles about image optimization

In this article:

Python Image Display

Displaying Images in Popular Python Libraries

Let’s see how to display an image in Python using the most popular image-related Python libraries.

1. Using Pillow to Display Images in Python

Pillow, also known as PIL (Python Imaging Library), offers extensive file format support, an efficient internal representation, and powerful image processing capabilities.

To install Pillow, simply type pip install pillow in your terminal. To display an image, you can use the Image module’s open function to load the image and the show function to display it.

from PIL import Image
# Load an image
img = Image.open('image.jpg')
# Display the image
img.show()

In this code, Image.open('image.jpg') opens and identifies the given image file, while img.show() displays it. If the file cannot be opened and identified, an OSError exception is raised.

Python Image Display

2. Using OpenCV to Display Images in Python

OpenCV is a library of programming functions for real-time computer vision applications. It’s a powerful tool for image processing that allows you to manipulate images in various ways, including resizing, cropping, and rotating, and apply thousands of machine learning algorithms to images and videos. A basic feature of OpenCV is its ability to display images.

To start with, you need to install OpenCV. You can do this by typing pip install opencv-python in your terminal. After installation, we can use the imread function to read the image and imshow function to display the image.

import cv2


# Load an image
img = cv2.imread('image.jpg')


# Display the image
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Python Image Display

In the code above, the waitKey(0) function waits until the user presses a key, while destroyAllWindows() closes all the windows we created. If the image path is wrong, imread will return an empty matrix.

3. Using Matplotlib to Display Images in Python

Matplotlib is a plotting library for Python and is often used for data visualization. However, it also offers functionality for image reading and displaying. Unlike OpenCV, it displays images in RGB mode, making it more suitable for image processing tasks that require color differentiation.

Firstly, you need to install Matplotlib with pip install matplotlib. After that, you can use the pyplot module’s imshow function to display the image.

import matplotlib.pyplot as plt
import matplotlib.image as mpimg


# Load an image
img = mpimg.imread('image.jpg')


# Display the image
imgplot = plt.imshow(img)
plt.show()

In this code, mpimg.imread('image.jpg') reads the image, and plt.imshow(img) displays the image. plt.show() finally renders the image.

Python Image Display

Note: If you get the warning “FigureCanvasAgg is non-interactive”, use the following command in Linux/Debian: pip install PyQt5

4. Using Scikit-Image to Display Images in Python

Scikit-Image is another powerful library for image processing in Python. It provides a comprehensive set of tools for image processing, including utilities to display images.

First, install Scikit-Image with pip install scikit-image. After that, you can use io.imread to read an image and io.imshow to display it.

from skimage import io


# Load an image
img = io.imread('image.jpg')


# Display the image
io.imshow(img)
io.show()

Python Image Display

In this code, io.imread('image.jpg') reads the image, and io.imshow(img) displays it. io.show() renders the image.

5. Using Tensorflow to Display Images in Python

Tensorflow is a powerful framework for machine learning and neural networks, and it also supports image processing. You can read and display images using the Tensorflow Keras API’s load_img and imshow functions.

First, install Tensorflow with pip install tensorflow. To install the CPU version, use pip install tensorflow-cpu. Then, use the load_img function to load an image and imshow function to display it.

import tensorflow as tf
from tensorflow.keras.preprocessing import image
import matplotlib.pyplot as plt
# Load an image
img = image.load_img('image.jpg')


# Display the image
plt.imshow(img)
plt.show()

In this code, image.load_img('image.jpg') loads an image in PIL format. plt.imshow(img) and plt.show() are used to display the image.

Python Image Display

Related content: Read our guide to image management

Fully Automated Python Image Resize and Cropping with Cloudinary

Displaying images in Python is simple enough, but when you need to crop, resize, or apply other manipulations in standard Python libraries, you’ll find it can be quite difficult, especially at large scale.

Cloudinary is a cloud-based service for managing images and videos, which offers a generous free plan and a Python SDK. It lets you upload your images and apply built-in effects, filters, and modifications. You can also resize images automatically, focusing on the most important elements with AI or adapt them to your website design without having to manually crop or scale them.

You can set the target dimensions of your resized image by specifying width, height, and/or the target aspect ratio as qualifiers of your resize transformation.

You can change the dimensions of an uploaded image by setting the image’s height, width, and/or aspect ratio, and Cloudinary automatically resizes or crops the image to fit into the requested size.

For example, this original image is 1200 x 1200 pixels:

Python Image Display

Resizing the image to 200 x 200 pixels, using crop, scale, fill and pad results in the following images:

Python Image Display

Get started with automated resize and cropping today!

  1. Get a free Cloudinary account
  1. Install the Python SDK
  1. Deliver the crop transformations shown above as follows:
    # Focus on the model in a portrait crop.

    CloudinaryImage("docs/model.jpg").image(gravity="person", height=600, width=450, crop="fill")

    # Detect the face for a thumbnail crop.

    CloudinaryImage("docs/model.jpg").image(gravity="face", height=250, width=250, crop="thumb")

    # Crop to a banner, automatically focusing on a region of interest.

    CloudinaryImage("docs/model.jpg").image(gravity="auto", height=150, width=600, crop="fill")

Learn more in Cloudinary’s Python quick start guide

QUICK TIPS
Tamas Piros
Cloudinary Logo Tamas Piros

In my experience, here are tips that can help you better utilize Python’s image libraries for displaying and processing images:

  1. Optimize image loading with lazy evaluation
    When working with large images, consider using lazy loading techniques to defer the loading of images until they are needed. This improves performance and reduces memory usage, especially in applications that handle multiple images.
  2. Use PIL for basic image manipulations before display
    Even if you’re using another library for display, use PIL (Pillow) to perform basic image manipulations like resizing, cropping, or adjusting brightness and contrast before displaying. This allows for consistent preprocessing and better control over image quality.
  3. Leverage OpenCV’s extensive image processing features
    OpenCV offers advanced capabilities beyond simple image display. Utilize its functions for edge detection, color space conversions, and applying filters to preprocess images before they are displayed, which can be particularly useful in computer vision projects.
  4. Combine Matplotlib with other libraries for data visualization
    Use Matplotlib’s image display features in conjunction with its plotting capabilities to create visualizations that combine images with data plots, annotations, or overlays. This is particularly effective in data science and machine learning projects where visualizing image data alongside statistical information is beneficial.
  5. Utilize Scikit-Image for advanced image analysis
    Scikit-Image is not just for displaying images; it excels in image analysis. Leverage its tools for tasks like segmentation, feature extraction, and morphological operations to analyze images before or after display, making it ideal for scientific research.
  6. Integrate TensorFlow for machine learning-driven image processing
    When working with TensorFlow, use its image processing capabilities to prepare images for neural network models. Use TensorFlow’s tf.image module for augmentations like rotation, flipping, and scaling, ensuring your images are model-ready before display.
  7. Automate repetitive tasks with Python scripts
    For workflows involving repetitive image processing tasks, write Python scripts that automate the resizing, cropping, and displaying of images. This saves time and ensures consistency across large datasets or multiple image files.
  8. Use Cloudinary for scalable image management
    Integrate Cloudinary for managing and delivering images at scale. Cloudinary’s Python SDK can automate transformations like resizing and cropping based on content (e.g., faces or objects), making it easier to handle large volumes of images efficiently.
  9. Consider image compression before display
    When displaying images in web applications or systems with limited bandwidth, compress images using libraries like Pillow or OpenCV. This reduces load times and ensures a smoother user experience without sacrificing too much quality.
  10. Use hybrid approaches for complex workflows
    Combine different libraries in a hybrid approach for complex workflows. For example, use OpenCV for image processing, Pillow for simple manipulations, and Matplotlib for final display and annotation. This allows you to leverage the strengths of each library for a comprehensive image handling solution.

These tips will help you maximize the effectiveness of Python’s image libraries, whether you’re displaying, processing, or managing images in your applications.

Last updated: Aug 23, 2024