web-dev-qa-db-fra.com

Faites une pause entre les images affichées dans openCV

Je voudrais montrer plusieurs images, en faisant une pause entre ..__ J'ai essayé avec waitKey, attendant que l'utilisateur appuie sur ESC, mais cela ne semble pas fonctionner.

import numpy as np
import cv2

img = cv2.imread('image1.jpg',0)
cv2.imshow('image',img)


# here it should be the pause
k = cv2.waitKey(0)
if k == 27:         # wait for ESC key to exit
    cv2.destroyAllWindows()

img = cv2.imread('image2.jpg',0)
    cv2.imshow('image',img)

Toute suggestion?

Merci d'avance

5
Antonio Serrano

image1.jpg s'affiche et attend que l'utilisateur appuie sur une touche quelconque depuis que vous avez utilisé waitKey(0) . Le 0 indique que le programme attendra qu'un utilisateur appuie sur une touche. Vous pouvez ajouter le nombre de millisecondes à attendre avant que la seconde image ne s'affiche à la place du 0. Une fois que vous avez appuyé sur une touche, image2.jpg est lu mais ne s'affiche pas car vous n'avez pas de waitKey après la seconde imshow et le programme se ferme.

Vous pouvez essayer le code suivant. Ce code suppose que vos "plusieurs images" se trouvent dans un dossier. Il affiche une image, met en pause pendant 3 secondes et affiche la suivante.

import cv2
import os

folder_path = ''#folder path to your images

for path in os.listdir(folder_path):#loop to read one image at a time 
    imgpath = os.path.join(folder_path, path)

    frame = cv2.imread(imgpath, 1)

    cv2.imshow('Window', frame)

    key = cv2.waitKey(3000)#pauses for 3 seconds before fetching next image
    if key == 27:#if ESC is pressed, exit loop
        cv2.destroyAllWindows()
        break
4
Abhijith

Dans l'appel waitkey(), le nombre correspond au nombre de millisecondes à attendre.

1
Martin Beckett

Ajouter une valeur à waitkey() le mettra en pause pour le nombre de millisecondes donné. Vous pouvez utiliser itertools.cycle() pour parcourir une liste d'images. 

Ce script fera une pause de 5 secondes, puis affichera l'image suivante. Si vous appuyez sur échappement, il sort.

from itertools import cycle
import cv2


for image_filename in cycle(['image1.jpg', 'image2.jpg']):
    image = cv2.imread(image_filename, 0)
    cv2.imshow('image', image)

    # Pause here 5 seconds.
    k = cv2.waitKey(5000)

    if k == 27:         # If escape was pressed exit
        cv2.destroyAllWindows()
        break
1
Martin Evans

Vous pouvez utiliser le module glob en python pour sélectionner tous les fichiers

import cv2
import glob # get all files in the directory


images = glob.glob("path_to_files/*.jpg") #get all files with given extension

for img in range(len(images)):
    current_image = cv2.imread(images[img], 1) #cv2.imread(images[i], 0) # for image in grayscale
    cv2.imshow('Display Images', current_image)
    key = cv2.waitKey(300) #change to your own waiting time 1000 = 1 second 
    if key == 27: #if ESC is pressed, exit
        cv2.destroyAllWindows()
        break
0
amran hossen