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
14 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
1To 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]) 2In 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()