Exercice 3¶

Table des matières

  • Gestion du dessin
  • Gestion des sliders
  • Gestion de la souris
  • Le programme principal
In [ ]:
import cv2
import numpy as np
import matplotlib.pyplot as plt

largeur = 100
hauteur = 50
posX = int(640/2)
posY = int(480/2)
dessin = False
image = None
couleur = [0,0,0]

Gestion du dessin¶

In [ ]:
def remplirNoir(image):
    global couleur
    couleur = [0,0,0]
    image[...] = couleur
    return image

def remplirCouleur(image):
    global couleur
    couleur = np.random.randint(0, 255,3,np.uint8)
    image[...] = couleur
    return image

def remplirRectangle(image,posx,posy,largeur,hauteur):
    image[...] = couleur
    xmin = max(0,int(posX-largeur/2))
    xmax = min(image.shape[1],int(posx+largeur/2))
    ymin = max(0,int(posy-hauteur/2))
    ymax = min(image.shape[0],int(posy+hauteur/2))
    image[ymin:ymax,xmin:xmax] = np.random.randint(0, 255,3,np.uint8)
    return image

Gestion des sliders¶

In [ ]:
def setLargeur(v):
    global largeur, image
    largeur = v
    if dessin:
        image = remplirRectangle(image,posX,posY,largeur,hauteur)
        cv2.imshow('image originale',image)

def setHauteur(v):
    global hauteur, image
    hauteur = v
    if dessin:
        image = remplirRectangle(image,posX,posY,largeur,hauteur)
        cv2.imshow('image originale',image)

Gestion de la souris¶

In [ ]:
def evenementSouris(event,x,y,flags,data):
    global posX, posY, image, dessin
    if event==cv2.EVENT_LBUTTONUP:
        posX = x
        posY = y
        dessin = True
        image = remplirRectangle(image,posX,posY,largeur,hauteur)
        cv2.imshow('image originale',image)

Le programme principal¶

In [ ]:
image = np.zeros((480,640,3), np.uint8)

cv2.namedWindow('image originale')
cv2.createTrackbar('Largeur','image originale',largeur,image.shape[1],setLargeur)
cv2.createTrackbar('Hauteur','image originale',hauteur,image.shape[0],setHauteur)
cv2.setMouseCallback('image originale',evenementSouris)
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)
        dessin = False
        cv2.imshow('image originale',image)
    if key ==ord('c'):
        image = remplirCouleur(image)
        dessin = False
        cv2.imshow('image originale',image)

print('arrêt du programme par l\'utilisateur')
cv2.destroyWindow('image originale')
arrêt du programme par l'utilisateur