import cv2
import numpy as np
import matplotlib.pyplot as plt
Toutes les valeurs de la matrice nd image doivent être initialisées à 0.
def remplirNoir(image):
# rempli une image en noir : toutes les valeurs de la matrice nd sont mises à 0
image[...] = 0
return image
On profite des simplifications possibles de numpy :
image[...]
le ... correspond à toutes les valeurs possibles des indices des 3 dimensions. Cela revient à écrire :
for y in range(image.shape[0]):
for x in range(image.shape[1]):
for c in range(image.shape[2]):
image[y,x,c] = 0
Pour générer une couleur aléatoire, on utilise la fonction random de numpy :
np.random.randint(0,255,3,np.uint8)
Cet appel renvoie une liste de 3 éléments dont les valeurs sont comprises entre 0 et 255.
def remplirCouleur(image):
# rempli l'image
image[...] = np.random.randint(0, 255,3,np.uint8)
return image
On profite encore de la notation ... de numpy :
image[...] = np.random.randint(0,255,3,np.uint8)
Dans cette affectation, les ... correspondent à
couleur = np.random.randint(0,255,3,np.uint8)
for y in range(image.shape[0]):
for x in range(image.shape[1]):
image[y,x] = couleur
Numpy adapte l'affectation en fonction des dimensions de la partie droite de l'affectation.
Le rectangle à remplir doit être centré dans l'image avec une largeur de 100 pixels et une hauteur de 50 pixels. Ainsi le remplissage du rectangle se fera entre les lignes :
ymin = image.shape[1]/2 - largeur/2
ymax = image.shape[1]/2 + largeur/2
et entre les colonnes :
xmin = image.shape[2]/2 - hauteur/2
xmax = image.shape[2]/2 + heuteur/2
def remplirRectangle(image,largeur,hauteur):
resultat = image.copy()
xmin = int((image.shape[1]-largeur)/2)
xmax = int((image.shape[1]+largeur)/2)
ymin = int((image.shape[0]-hauteur)/2)
ymax = int((image.shape[0]+hauteur)/2)
resultat[ymin:ymax,xmin:xmax] = np.random.randint(0, 255,3,np.uint8)
return resultat
On profite encore d'une notation simplifiée des accès indexés à un matrice nd :
resultat[ymin:ymax,xmin:xmax] = np.random.randint(0, 255,3,np.uint8)
Ce qui revient à écrire :
couleur = np.random.randint(0,255,3,np.uint8)
for y in range(ymin,ymax):
for x in range(xmin,xmax):
image[y,x] = couleur
image = np.zeros((480,640,3), np.uint8)
largeur = 100
hauteur = 50
cv2.namedWindow('image originale')
cv2.imshow('image originale',image)
while True:
key = cv2.waitKey(30) & 0x0FF
if key == 27 or key==ord('q'):
break;
if key ==ord('n'):
image = remplirNoir(image)
cv2.imshow('image originale',image)
if key ==ord('c'):
image = remplirCouleur(image)
cv2.imshow('image originale',image)
if key ==ord('r'):
image = remplirRectangle(image,largeur,hauteur)
cv2.imshow('image originale',image)
print('arrêt du programme par l\'utilisateur')
cv2.destroyWindow('image originale')
arrêt du programme par l'utilisateur