Somaire :
Exécutez la cellule ci-dessous ;
Si un message d'erreur, type module inexistant, apparait : il vous faudra les installer...
==> Si vous travaillez avec Edupython : faire : Outils->Outils->installer un module avec pip
(Normalement, Edupython 3.7.6 __ 2020 possède tous ces modules sauf imageio qu'il faudra 'piper')
import cv2
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import IPython.display
import imageio
Votre proposition :
Question : Regardez bien ce cube.. Imaginons que la cape d'invisibilité soit verte..
==> Est-ce que, selon vous, il sera aisé de choisir une teinte de couleur de cape (et toutes ses variations) à l'aide d'une seule grandeur (R, G, V) ?
Argumentez dans la cellule ci-dessous..
Votre réponse argumentée :
Votre réponse argumentée :
Qu'est-ce qu'une vidéo si ce n'est une suite d'images !!
Autrement dit, losque votre webcam vous filme et que l'écran vous présente la vidéo en direct... En réalité, la webcam prend des photos qu'elle envoit, une à une, à votre ordinateur qui les présente rapidement dans une fenêtre... et ceci, tant que l'utilisateur le souhaite !
JUSTEMENT, tant que est codé, en Python, avec la fonction while :
Exercice :
1) Retrouver dans le script le ou les N° de ligne (sélectionnez la cellule du script-->barre bleue, et appuyez sur ' l ' ) où apparaissent une boucle while :
2) Quel argument contient cette fonction while, et qu'est-ce que cela veut dire ? :
3) Cette boucle while est-elle infinie ? Comment l'utilisateur peut en sortir ? Quelle instruction Python est utilisée ? :
Exercice : Etudiez le script pour répondre aux questions suivantes :
1) La 1ère fenêtre vidéo qui nous est présentée est en codage HSV, GBR ou RGB ?
2) Avant d'être enregistrée, l'image du décor subit des transformations de son codage couleur : lesquelles ?
3) Pour le 2ème flux vidéo, chaque image captée subit des transformations de son codage couleur avant qu'elles ne soient montrées : lesquelles ?
4) Pourquoi le dernier encodage couleur de cette image vidéo est important vis à vis des contrôles ?
5) Est-ce que finalement l'échange des pixels (vidéo/décor) se fait sous le même encodage couleur ? Si oui lequel ?
6) L'image vidéo qui nous est présentée a t-elle subi une dernière transformation d'encodage couleur ?
Exercice : Etudiez le script pour répondre aux questions suivantes :
1) Etant donné que la méthode getpixel permet de récupérer le tupple (H,S,V) d'un pixel d'une image, expliquer l'intérêt d'utiliser préalablement la méthode Image.fromarray :
2) Expliquer ce que fait le script pour étudier chacun des pixels d'une image :
3) Pourquoi dans les boucles for, les bornes supérieures sont variable-1 ? :
4) Dans le cas où Smin est fixé à 0 et Vmax fixé à 255, comment interprétez vous la condition if ligne 55 ? Quel sera le résultat au niveau des couleurs de l'image visible lorsqu'on augmente progressivement Hmax ?
5) Proposez alors une solution qui permettrait d'éliminer que le vert mais pas le bleu ! :
###################################################
def sauvegarde_image(matrice):
nom_format="Fondvisible.jpg"
imageio.imwrite(nom_format, matrice[:, :]) # Enregistrement dans le dossier en cours de l'image 'matrice'
#####################################################
def trackChaned(x):
pass
#####################################################
camera=cv2.VideoCapture(0) # Initiation de la caméra #0 pour la webcam intégrée, et 1 pour la webcam externe
while(True):
ret,img1=camera.read() # prise d'1 image par la caméra
# Attention, img1 est en format : tableau : de pixels représentant l'image
cv2.imshow("Enregistrement du Fond : -> Touche p", img1) # présentation de l'image dans 1 fenêtre avec 1 titre
if(cv2.waitKey(1) ==ord("p")): # Condition : si on appuis sur la touche p
capture=img1
capture= cv2.cvtColor(capture, cv2.COLOR_RGB2BGR) # Passage du codage des couleurs de RGB à BGR
capture= cv2.cvtColor(capture, cv2.COLOR_BGR2HSV) # Passage du codage des couleurs de BGR à HSV
sauvegarde_image(capture) # Appel de la fonction (voir plus haut)
break;
camera.release() # Extinction de la caméra
cv2.destroyAllWindows() # Fermeture de la fenêtre (vidéo)
#####################################################
#####################################################
camera=cv2.VideoCapture(0)
######## Ci-dessous : Construction de la fenêtre des curseurs de contrôle HSV #######
cv2.namedWindow("Controles :",1) # création d'1 fenêtre
cv2.resizeWindow("Controles :", (320,140)) # détermination de sa taille
cv2.moveWindow("Controles :", 973,50) # et de son positionnement
cv2.createTrackbar("Hmax=", "Controles :",0,180,trackChaned) # Création d'une barre de contrôle de 0 à 180 nommée Hmax
cv2.createTrackbar("Smin=", "Controles :",0,255,trackChaned) # ..
cv2.createTrackbar("Vmax=", "Controles :",0,255,trackChaned) # ..
cv2.setTrackbarPos("Hmax=", "Controles :",0) # On impose le curseur à 0 pour Hmax
cv2.setTrackbarPos("Smin=", "Controles :",0) # ..
cv2.setTrackbarPos("Vmax=", "Controles :",255) # ..
######## Fin de paramétrage de la fenêtre des curseurs de contrôle HSV #######
while(True):
ret,img1=camera.read() # Attention, img1 est en format : tableau : de pixel représentant l'image
img1= cv2.cvtColor(img1, cv2.COLOR_RGB2BGR)
img1= cv2.cvtColor(img1, cv2.COLOR_BGR2HSV)
Hmax=cv2.getTrackbarPos("Hmax=", "Controles :") # On récupère la position du curseur Hmax
Smin=cv2.getTrackbarPos("Smin=", "Controles :") # ..
Vmax=cv2.getTrackbarPos("Vmax=", "Controles :") # ..
##############
img2 = Image.open('Fondvisible.jpg') # On ouvre, dans img2, le décor seul (en format image !)
largeur = img1.shape[0] # on récupère la largeur de l'image vidéo
hauteur = img1.shape[1] # et sa hauteur
img1_img= Image.fromarray(img1) # Attention, on transforme le tableau de pixel d'img1 en image !
for y in range (0, hauteur-1):
for x in range (0,largeur-1):
Codage_Couleur_pixel_video= img1_img.getpixel((y,x))# méthode getpixel récupère le tupple du codage couleur du
# ..pixel à la position y,x de l'image.
H=Codage_Couleur_pixel_video[0] # Accès au 1er élément du tupple
S=Codage_Couleur_pixel_video[1] # ..
V=Codage_Couleur_pixel_video[2] # ..
if H<Hmax and S>Smin and V<Vmax: # Test du pixel vidéo par rapport aux contrôles
Codage_Couleur_pixel_fond= img2.getpixel((y,x))
Nouveau_H=Codage_Couleur_pixel_fond[0]
Nouveau_S=Codage_Couleur_pixel_fond[1]
Nouveau_V=Codage_Couleur_pixel_fond[2]
img1_img.putpixel((y,x), (Nouveau_H,Nouveau_S,Nouveau_V)) # méthode putpixel pour imposer les couleurs
img1 = np.array(img1_img) #attention, on retransforme l'image en tableau de pixels
img1= cv2.cvtColor(img1, cv2.COLOR_HSV2RGB)
cv2.imshow("Cape d invisibilite (vert) ; q pour sortir.", img1)
if(cv2.waitKey(1) ==ord("q")):
break;
camera.release()
cv2.destroyAllWindows()
--> Activez (Enlever les # et exécutez) la cellule suivante.
# camera.release()
# cv2.destroyAllWindows()