web-dev-qa-db-fra.com

Python OpenCV - waitKey (0) ne répond pas?

J'utilise l'opencv 2.4.7 sur Ubuntu 12.04. Je programme avec Python et j'ai un problème lorsque je lance ce script:

import cv2

img = cv2.imread('347620923614738322_233985812.jpg')
cv2.namedWindow("window")
cv2.imshow("window", img)
cv2.waitKey(0)

Le problème est que le script ne s'arrête pas lorsque je ferme l'image. J'ai cherché des informations sur waitKey et j'ai constaté que l'utilisation de cv2.waitKey(0) est correcte. 

Je ne comprends pas, où est le problème?

19
Dhorka

Ce code fonctionne pour moi de IDLE:

# -*- coding: utf-8 -*-

# Objectif : découvrir le fonctionnement d'opencv-python
# http://opencv-python-tutroals.readthedocs.org/en/latest/index.html


import numpy as np
import cv2

# Load an color image in grayscale
img = cv2.imread('Lena.tiff',0)
WINDOW_NAME = 'Image de Lena'
cv2.namedWindow(WINDOW_NAME, cv2.CV_WINDOW_AUTOSIZE)
cv2.startWindowThread()

# Display an image
cv2.imshow(WINDOW_NAME,img)
cv2.waitKey(0) 


cv2.destroyAllWindows()

J'espère que cela aidera les futurs lecteurs.

6
Raoul HATTERER

J'ai trouvé que cela fonctionne si j'appuie sur la touche pendant que la fenêtre est au point. Si la ligne de commande est active, rien ne se passe

27
user2022581

Ajouter une cv2.waitKey (1) après avoir détruit la fenêtre devrait fonctionner dans ce cas.

cv2.imshow('imgae',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)
8
Teng Long

Voici un code minimaliste pour de meilleures performances sur toutes les plateformes:

import cv2

img = cv2.imread("image.jpg")
cv2.imshow("Window", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Et maintenant quelques observations

Lorsque l'utilisateur veut fermer la fenêtre en appuyant sur la touche0/, il doit s'assurer que la touche 0 est enfoncée pendant que la fenêtre est active. Comme indiqué ci-dessus, si le terminal est activé, rien ne se passe et le code reste bloqué à cv2.waitKey(0) jusqu'à ce que la touche 0 soit enfoncée correctement pendant que la fenêtre est active. 

Appuyer sur la touche 0 pendant que la fenêtre est active est le bon moyen de fermer la fenêtre et de s’assurer que , une fois que la fenêtre est détruite dans la ligne cv2.destroyAllWindows() et que le programme se termine, l’utilisateur peut reprendre le contrôle de le terminal

Si vous quittez la fenêtre par un clic de souris, la fenêtre sera détruite, mais l'utilisateur se retrouvera dans la situation de ne pas être en mesure de récupérer le contrôle du terminal . Dans ce type de situation, l'utilisateur peut souhaiter fermer le terminal qui ne répond pas et en ouvrir un nouveau. 

1

Essayez d'exécuter le script directement à partir du terminal fonctionne à 100% pour moi mais pas à partir d'un IDE par exemple , j'explique: J'utilise Fedora 20 et j'ai le même problème, en copiant le premier exemple du tutoriel officiel opencv python, j’utilise:

  • Fedora 20 64bit
  • Spyder IDE pour python
  • Python Version 2.7.5
  • Fedora 64 bits
  • OpenCV 2.4.7 

Voici le code pour test

import cv2
img = cv2.imread('/path/image1.jpeg',0)
cv2.imshow('Display',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Lorsqu'il exécute ce script à l'aide de F5 à partir de Spyder, il l'exécute à l'aide du terminal python intégré avec cette ligne:

runfile('/home/user/Workspace/test.py', wdir=r'/home/user/Workspace')

Dans ce cas, cv2.waitKey (0) ou cv2.waitKey (-1) ne fonctionne pas et les fenêtres restent ouvertes après avoir appuyé sur les touches portant le code de l'exemple Si vous essayez de fermer les fenêtres, le message "Pas de réponse, Forcer à quitter "Alert Mais lors de l'exécution du script depuis Terminal, cela fonctionne à 100%

n'a pas trouvé le problème Origine, mettra à jour si je le trouve.

1
Cherif KAOUA

cv2.waitKey (0) signifie que le script est en boucle infinie avec 0 millisecondes d’attente après la boucle.

vous n'avez pas précisé la fin de la condition de l'application.

Essayez ce code: Utilisation d’autres touches pour la fonction waitKey () de opencv

0
Tomasz Edwin

Résolu dans Spyder sous Ubuntu en suivant [Exécuter] -> [Configuration par fichier] -> [Exécuter dans un terminal système externe].

0
Apogentus

Il existe un problème avec le système Unix exécutant des programmes OpenCV à partir de cahiers Python.

Cochez cette autre méthode. Nous vous conseillons d’exécuter du code en python dans un terminal. Vous ne rencontrerez aucun problème

Copiez le même code et sauvegardez-le avec filename.py

import cv2
input = cv2.imread('path_to_image.png')
cv2.imshow('Hello World', input)
cv2.waitKey(0)
cv2.destroyAllWindows()

puis ouvrez un répertoire spécifique puis ouvrez un terminal

Pas:

Open Terminal
cd path/to/filename.py
source activate YOURPROFILE 
python filename.py

Cela résoudra le problème

https://youtu.be/8O-FW4Wm10s

0
R K Bhalodia