Python NumPy (Page: 3)

NumPy image manipulations

NumPy array can work with standard images. Let’s consider some examples. First of all, we need to have few libraries available:

  • numpy - Munpy array library itself
  • matplotlib.pyplot - is a state-based interface to matplotlib. It provides a MATLAB-like way of plotting.
  • scipy - The SciPy library is one of the core packages that make up the SciPy stack. It provides many user-friendly and efficient numerical routines, such as routines for numerical integration, interpolation, optimization, linear algebra, and statistics.
And we also have a picture of lovely fish, which will be our experimental picture!

This is a picture of <i>Sparisoma aurofrenatum</i> or  rainbow parrot fish from Wikipedia
Fish picture for NumPy demo

This is a picture of Sparisoma aurofrenatum or  rainbow parrot fish from Wikipedia

Read image with NumPy

First of all we will read image into NumPy array with ndimage function, check parameters of this image and display it with Python matplotlib.pyplot library


import numpy as np
import matplotlib.pyplot as plt
from scipy import ndimage

img_array = ndimage.imread('22_fish.jpg') # read image into NumPy array    
print(img_array.shape)                    # (335, 750, 3) y=335, x=750 
                                          # 3 layers for R, G and B colours
                                          # B&W image have only one colour layer
print(type(img_array))                    # 
plt.imshow(img_array)                     # convert into displayable format 
plt.show()                                # display image
Fish picture displayed with matplotlib.pyplot library in our script
Fish picture displayed with matplotlib.pyplot library

Fish picture displayed with matplotlib.pyplot library in our script

In all following scripts, we are assuming, that we load all necessary libraries and already read image into ‘img_array’

Image slicing

We can slice our array and every slice will be a part of our image. Just with standard slicing tools


sliced = img_array[200:, 350:, :]
plt.imshow(sliced)
plt.show()
Display slice [200:, 350:, :], from 200 to 335 by Y, from 350 to 750 by X and all colours
Image slicing

Display slice [200:, 350:, :], from 200 to 335 by Y, from 350 to 750 by X and all colours

Image mirroring

Using these slices we can mirroring image along X or Y axes, or both


x_mirror = img_array[::-1, :, :]
plt.imshow(x_mirror)
plt.show()
Image mirroring over X axis by slice with negative step
Image mirroring

Image mirroring over X axis by slice with negative step

Simple Image compression

Using step for slicing bigger than 1 we can make compression along this axis by removing some parts of the image. This compression will loose some data, so it will be not very accurate. For more accurate compression we need to recalculate average colours as well.


x_compress = img_array[:, ::3, :]
plt.imshow(x_compress)
plt.show()
Simple 3 fold image compression along X axis but taking [:, ::3, :] slice
Image compression

Simple 3 fold image compression along X axis but taking [:, ::3, :] slice

Array splitting

It is also possible to split array into few other arrays with ‘split’ function. Axis- show the direction of splitting. Value 0 can be ommited.


y = np.split(img_array, 5, axis=0)
plt.imshow(y[3])
plt.show()
Displaying slice of image over Y axis.
1/5 of image

Displaying slice of image over Y axis.

Array concatenation

Splited as an array image can be concatenated back. Furthermore – it can be concatenated in different order which will result in changing slices.

In this example we will split colour axis and then concatenate only one colour – this will give us Back&White image for only one colour from palette. Let’s try to make B&W over Green colour of this fish.


z = np.split(img_array, 3, axis=2)
plt.imshow(np.concatenate((z[1],z[1],z[1]), axis=2))
plt.show()
Red and Blue colour layers are removed and Green turns into Black and White colour
Monochrome image

Red and Blue colour layers are removed and Green turns into Black and White colour

Go to Page: 1; 2; 3; 4; 5; 6;


Published: 2021-10-04 11:48:19
Updated: 2021-11-14 08:41:55