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?
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.
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
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)
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.
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:
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.
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
Résolu dans Spyder sous Ubuntu en suivant [Exécuter] -> [Configuration par fichier] -> [Exécuter dans un terminal système externe].
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