Vi kan se på et svart-hvitt-bilde som en matrise av tall, hvor verdien viser hvor lys gråtonen er. Verdiene kan for eksempel være desimaltall mellom 0 og 1 eller heltall mellom 0 og 255 (tall som kan skrives med 8 bits).
Matplotlib har noen enkle funksjoner for å lese inn et bilde fra en fil, vise det og å lagre bildet. For å forenkle litt mer, er det noen ferdige funksjoner under.
import matplotlib.pyplot as plt
import numpy as np
def lesBilde(fil):
'''
Hjelpefunksjon som laster inn et svart/hvitt-bilde og returnerer
en matrise med heltall. De fleste bildeformat kan importeres.
'''
bilde = plt.imread(fil)
# Om bildet er i farger, blir det lagret i en [n,m,3]-matrise,
# en for hver basisfarge (rød, grønn, blå). Det blir konvertert til
# svart-hvitt og fargene justert for hvor følsomme vi er for de.
if len(bilde.shape) > 2:
bilde = bilde[:,:,0]*0.2126 + \
bilde[:,:,1]*0.7152 + \
bilde[:,:,2]*0.0722
# Om bildet blir lest inn som flyttall, vil vi gjøre det om til heltall
if np.issubdtype(bilde.dtype, np.floating):
bilde = bilde * 255
bilde = np.uint8(bilde)
return bilde
def skrivBilde(bilde, filnavn):
'''
Hjelpefunksjon som lagrer en matrise som et bilde.
'''
plt.imsave(bilde, filnavn, cmap="gray", vmin=0,vmax=255)
def visBilde(bilde):
'''
Hjelpefunksjon som viser en matrise som et bilde.
'''
fig = plt.figure(figsize=(6,6)) # Endre gjerne størrelsen her
plt.imshow(bilde, cmap="gray",vmin=0,vmax=255)
plt.axis("off")
Bildet under er et klassisk bilde fra en åpen database. Undersøk gjerne noen av dine egne bilder.
b = lesBilde("cameraman.png")
visBilde(b)

Utdrag av matriser
Her tar vi et utsnitt av matrisen/bildet der hvor øret til mannen er. Origo i billedbehandling er satt øverst til venstre, så det blir likt matriseindeksene..
visBilde(b)
plt.axis("on")
plt.show()

øre = b[55:65,105:115]
print(øre)
visBilde(øre)
[[ 9 9 10 9 17 16 10 10 10 9]
[ 9 9 10 56 100 88 25 10 10 9]
[ 9 9 77 82 58 26 55 11 10 10]
[ 9 20 152 163 126 22 19 11 10 9]
[ 10 57 151 180 146 61 62 37 18 12]
[ 12 45 145 164 72 82 133 166 78 14]
[ 12 29 138 149 83 64 190 176 127 22]
[ 18 24 132 141 68 35 148 151 110 17]
[ 20 19 116 113 173 34 121 133 80 17]
[ 21 20 39 173 181 134 118 133 101 65]]
