OpenCV – Images et videos

ouvrir et afficher une image ou le flux d’une camera USB , c’est le thème de ce tuto.

voyons pour commencer comment ouvrir une image enregistrée dans un fichier dans le même répertoire que le pgme python:

import cv2  

# affichage greyscale mode
img0 = cv2.imread('flower.png', 0)
# affichage colormode
img1 = cv2.imread('flower.png', 1)

while True:  
    cv2.imshow('image 0', img0)
    cv2.imshow('image 1', img1)
    if cv2.waitKey(1) == 27:
        break 

cv2.destroyAllWindows()

cela donne le resultat suivant ou nous voyons l’iamge en deux versions, echelle de gris et couleur .

voyons maintenant comment afficher le flux video d’une camera USB avec les memes principes:

explications du programme

import cv2
# connection a la camera
cap = cv2.VideoCapture(0)

while (True):
    # lecture d'une image (frame) du flux video
    ret, frame = cap.read()
    # affichage de l'image (frame) dans une fenetre nommée "Video"
    cv2.imshow('Video', frame)
    # test appui clavier et si touche ESC arret boucle while
    if cv2.waitKey(1) == 27:
        break 
# arret flux camera   
cap.release  
# fermeture des toutes les fenetres d'affichage
cv2.destroyAllWindows()

en resultat , le flux des images s’affiche dans une fenêtre comme ci dessous:

améliorons le programme en ajoutant l’enregistrement du flux vidéo dans un fichier :

import cv2
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'XVID')
videowriter = cv2.VideoWriter("capture.avi", fourcc, 25, (640, 480));

while (True):
    ret, frame = cap.read()
    videowriter.write(frame)
    cv2.imshow('Video', frame)    
    
    if cv2.waitKey(1) == 27:
        break    
 
cap.release()
videowriter.release()  
cv2.destroyAllWindows()

derniere amelio, l’enregistrement du flux video image par image :

import cv2
cap = cv2.VideoCapture(0)

i=1
while (True):
    ret, frame = cap.read()
    cv2.imwrite('captureImg'+str(i)+'.jpg', frame)
    cv2.imshow('Video', frame)
    i+=1    
    
    if cv2.waitKey(1) == 27:
        break    
 
cap.release() 
cv2.destroyAllWindows()

a partir des ces quelques bases il est ensuite possible d’imaginer des développements, par exemple des boutons dans une fenetre Tkinter permettant de déclencher la prise d’une photo ou l’enregistrement vidéo a la demande et non pas en permanence .