Writing or Saving images play a crucial role in image processing and computer vision tasks. It is necessary to save images when performing image processing operations such as cropping, resizing, rotating, or applying various filters.
Writing an image refers to the process of saving or storing an image as an external file on a disk or in memory. During this process, we usually specify the desired file format (such as JPEG, PNG, TIFF, etc.) and provide the file name or path.
In the scikit-image library, the io module offers a function called imsave() specifically for writing and storing images as external files. This function is useful for saving the results of image manipulation operations.
The io.imsave() method
By using imsave() method, writing the image to an external file with the desired file format, file name, and desired location can be possible. Following is the syntax of this method −
skimage.io.imsave(fname, arr, plugin=None, check_contrast=True, **plugin_args)
The function takes the following parameters −
- fname − A string representing the file name or path where the image will be saved. The format of the file is obtained from the extension of file name.
- arr − The NumPy array of shape (M,N) or (M,N,3) or (M,N,4) containing the image data to be saved.
- plugin (optional) − A string specifying the plugin to use for saving the image. If the plugin parameter is not provided, the function will automatically try different plugins, starting with imageio, until a suitable one is found. However, if the file name (fname) has a “.tiff” extension, the tifffile plugin will be used by default.
- check_contrast (optional) − A boolean indicating whether to check the contrast of the image and print warning. The default value is True.
- **plugin_args (optional) − Additional keyword arguments that are passed to the specified plugin.
Example 1
The following example writes an array of random data to an external image file (.jpg) using the imsave() method.
import numpy as np from skimage import io # Generate an image with random numbers image_data = np.random.randint(0, 256, size=(256, 256, 3), dtype=np.uint8) # Save the random image as a JPG file io.imsave(''Output/Random_image.jpg'', image_data) print("The image was saved successfully.")
Output
The image was saved successfully.
If we navigate to the directory where the image was saved, we will be able to observe the saved “Random_image.jpg” image as shown below −
Example 2
The following example writes an image array to a TIFF file (.tiff) using the imsave() method.
import numpy as np from skimage import io # Read an image image_data = io.imread(''Images/logo-w.png'') print("The input image properties:") print(''Type:'', type(image_data)) print(''Shape:'', image_data.shape) # Save the image as a tiff file io.imsave(''Output/logo.tiff'', image_data) print("The image was saved successfully...")
Output
The input image properties: Type: < class ''numpy.ndarray'' > Shape: (225, 225, 4) The image was saved successfully...
The following image represents the saved “logo.tiff” file in the directory where the image was saved.
Example 3
The following example demonstrates how to save an image to a JPEG file (.jpeg) with low quality using the imsave() method.
import numpy as np from skimage import io # Read an image image = io.imread(''Images/Flower1.jpg'') # Save the image as a JPEG file io.imsave(''Output/flower.jpeg'', image, plugin=''pil'', quality=10) # Display the image array properties print("The input image properties:") print(''Type:'', type(image)) print(''Shape:'', image.shape) print("The image was saved successfully...")
Output
The input image properties: Type: < class ''numpy.ndarray''> Shape: (4000, 6000, 3) The image was saved successfully...
The following images represent details of both input (Flower1.jpg) and saved (flower.jpeg) files in the respective directories.