Of course! Showing an image in Python is a common task, especially when working with data analysis, machine learning, or computer vision. The best library to use depends on your specific needs (e.g., simple display vs. interactive plotting).

Here’s a comprehensive guide covering the most popular methods, from the simplest to the most feature-rich.
Summary: Which Method Should I Use?
| Method | Best For | Key Feature |
|---|---|---|
matplotlib.pyplot |
General Purpose, Jupyter Notebooks | Standard, simple, integrates with NumPy. |
| PIL/Pillow | File Handling, Basic Display | The classic image processing library. |
| OpenCV | Computer Vision, High Performance | BGR color format, video processing. |
| IPython.display | Jupyter Notebooks | Clean, non-blocking display of images. |
cv2.imshow() |
Desktop Applications | High-performance GUI window (OpenCV). |
Method 1: Using matplotlib.pyplot (Most Common & Recommended)
This is the go-to method for most data science and scientific computing tasks. It's versatile, easy to use, and integrates seamlessly with NumPy arrays.
Step 1: Install Matplotlib
If you don't have it installed:
pip install matplotlib numpy
Step 2: Show an Image from a File
This is the most common scenario. You have an image file (like .png or .jpg) and you want to display it.

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
# Path to your image file
image_path = 'your_image.png'
# Read the image from the file
img = mpimg.imread(image_path)
# Display the image
plt.imshow(img)
plt.axis('off') # Turn off axis numbers and ticks
plt.show()
Step 3: Show a NumPy Array
Often, your image data is already in a NumPy array. matplotlib handles this perfectly.
import numpy as np import matplotlib.pyplot as plt # Create a sample image (a 100x100 pixel gradient) # The shape is (height, width, color_channels) # For a color image, color_channels is 3 (RGB) or 4 (RGBA) gradient = np.zeros((100, 100, 3), dtype=np.uint8) # Fill with a gradient from black to blue gradient[:, :, 2] = np.linspace(0, 255, 100) # Blue channel # Display the NumPy array as an image plt.imshow(gradient)"A Simple Blue Gradient") plt.show()
Method 2: Using PIL (Pillow) - The Classic Image Library
Pillow is the modern fork of Python Imaging Library (PIL). It's excellent for opening, manipulating, and saving many different image file formats.
Step 1: Install Pillow
pip install pillow
Step 2: Show an Image from a File
Pillow's Image.show() method uses your operating system's default image viewer (e.g., Preview on macOS, Photos on Windows).
from PIL import Image # Path to your image file image_path = 'your_image.png' # Open the image file img = Image.open(image_path) # Display the image using the OS default viewer img.show()
Note: This method is less flexible for programmatic control (like adding titles or multiple plots in one window) compared to matplotlib.

Method 3: Using OpenCV - For Computer Vision
OpenCV is the powerhouse for real-time computer vision. It's highly optimized but has one important quirk: it loads images in BGR format, not the standard RGB.
Step 1: Install OpenCV
pip install opencv-python
Step 2: Show an Image from a File
import cv2
# Path to your image file
image_path = 'your_image.png'
# Read the image
# Note: cv2 reads in BGR format by default
img_bgr = cv2.imread(image_path)
# --- IMPORTANT COLOR CONVERSION ---
# If you want to display it correctly with matplotlib, convert BGR to RGB
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)
# --- Option A: Display with OpenCV's own window ---
# This creates a high-performance GUI window
cv2.imshow('Image Window - OpenCV', img_bgr)
# The window will close automatically after any key is pressed
cv2.waitKey(0)
cv2.destroyAllWindows()
# --- Option B: Display with Matplotlib (recommended for correct colors) ---
import matplotlib.pyplot as plt
plt.imshow(img_rgb) # Use the converted RGB image'Image displayed with Matplotlib (from OpenCV)')
plt.axis('off')
plt.show()
Method 4: Using IPython.display (Specifically for Jupyter Notebooks)
If you are working in a Jupyter Notebook or JupyterLab, this is the cleanest way to display an image. It doesn't interfere with your plotting outputs.
Step 1: Install IPython (usually comes with Jupyter)
pip install ipython
Step 2: Show an Image from a File or URL
from IPython.display import Image, display
# --- Option A: Display from a local file ---
# This will render the image directly in the notebook cell output
img_file = Image('your_image.png')
display(img_file)
# --- Option B: Display from a URL ---
# This is incredibly useful for quick checks
img_url = Image('https://i.imgur.com/5h6B5kF.png')
display(img_url)
Complete Example: Loading, Processing, and Showing
Here is a full workflow that loads an image, converts it to grayscale, and shows both the original and processed images side-by-side using matplotlib.
import cv2
import matplotlib.pyplot as plt
# 1. Load the image using OpenCV (reads as BGR)
image_path = 'your_image.png'
original_image_bgr = cv2.imread(image_path)
if original_image_bgr is None:
print(f"Error: Could not load image at {image_path}")
else:
# 2. Convert BGR to RGB for correct color display in matplotlib
original_image_rgb = cv2.cvtColor(original_image_bgr, cv2.COLOR_BGR2RGB)
# 3. Process the image: Convert to Grayscale
# cv2.COLOR_BGR2GRAY is used because the original is still in BGR format
gray_image = cv2.cvtColor(original_image_bgr, cv2.COLOR_BGR2GRAY)
# 4. Create a figure to display the images
plt.figure(figsize=(12, 6)) # Set the figure size
# 5. Display the original image
plt.subplot(1, 2, 1) # (rows, columns, panel number)
plt.imshow(original_image_rgb)
plt.title('Original Image (RGB)')
plt.axis('off')
# 6. Display the grayscale image
# For grayscale, use a colormap like 'gray' or 'viridis'
plt.subplot(1, 2, 2)
plt.imshow(gray_image, cmap='gray')
plt.title('Grayscale Image')
plt.axis('off')
# 7. Show the final plot
plt.tight_layout() # Adjust layout to prevent overlap
plt.show() 