How do I use the matlib function plt.imshow(image) to display multiple images?

For example my code is as follows:

for file in images: process(file) def process(filename): image = mpimg.imread(filename) <something gets done here> plt.imshow(image) 

My results show that only the last processed image is shown effectively overwriting the other images

1

4 Answers

You can set up a framework to show multiple images using the following:

import matplotlib.pyplot as plt import matplotlib.image as mpimg def process(filename: str=None) -> None: """ View multiple images stored in files, stacking vertically Arguments: filename: str - path to filename containing image """ image = mpimg.imread(filename) # <something gets done here> plt.figure() plt.imshow(image) for file in images: process(file) 

This will stack the images vertically

1

To display the multiple images use subplot()

plt.figure() #subplot(r,c) provide the no. of rows and columns f, axarr = plt.subplots(4,1) # use the created array to output your multiple images. In this case I have stacked 4 images vertically axarr[0].imshow(v_slice[0]) axarr[1].imshow(v_slice[1]) axarr[2].imshow(v_slice[2]) axarr[3].imshow(v_slice[3]) 
2

In first instance, load the image from file into a numpy matrix

from typing import Union,List import numpy import cv2 import os def load_image(image: Union[str, numpy.ndarray]) -> numpy.ndarray: # Image provided ad string, loading from file .. if isinstance(image, str): # Checking if the file exist if not os.path.isfile(image): print("File {} does not exist!".format(imageA)) return None # Reading image as numpy matrix in gray scale (image, color_param) return cv2.imread(image, 0) # Image alredy loaded elif isinstance(image, numpy.ndarray): return image # Format not recognized else: print("Unrecognized format: {}".format(type(image))) print("Unrecognized format: {}".format(image)) return None 

Then you can plot multiple image using the following method:

import matplotlib.pyplot as plt def show_images(images: List[numpy.ndarray]) -> None: n: int = len(images) f = plt.figure() for i in range(n): # Debug, plot figure f.add_subplot(1, n, i + 1) plt.imshow(images[i]) plt.show(block=True) 

The show_images method take in input a list of images that you can read iteratively using the load_image method.

Using a plt.show() after plt.imshow(image) while in the for loop worked for me.

for file in images: process(file) def process(filename): image = mpimg.imread(filename) # <something gets done here> plt.imshow(image) plt.show() 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy