web-dev-qa-db-fra.com

la fonction cv2.imshow () ouvre une fenêtre qui dit toujours ne pas répondre - python opencv

J'essaie de lancer un programme très simple. Pour ouvrir un fichier jpg et l’afficher à l’aide de la bibliothèque opencv pour python. Au début, tout a bien fonctionné, mais maintenant, il ouvre une fenêtre qui ne montre pas l’image mais indique «ne répond pas». Je dois aller au gestionnaire de tâches et le fermer!

from numpy import *
import matplotlib as plt
import cv2

img = cv2.imread('amandapeet.jpg')
print img.shape

cv2.imshow('Amanda', img)
17
vicky

Vous avez manqué une dernière ligne:

cv2.waitKey(0)

La fenêtre affiche ensuite l'image jusqu'à ce que vous appuyiez sur une touche du clavier. Ou vous pouvez passer comme suit:

cv2.waitKey(1000)
cv2.destroyAllWindows()

Ici, la fenêtre montre l'image pendant 1000 ms ou 1 seconde. Après cela, la fenêtre disparaîtrait d'elle-même. Mais dans certains cas, ça ne va pas. Vous pouvez donc le détruire avec force en utilisant cv2.destroyAllWindows ()

Veuillez lire d’abord les didacticiels: http://docs.opencv.org/trunk/doc/py_tutorials/py_tutorials.html

37
Abid Rahman K

Aucune des réponses ici ne fonctionnait sous MacOS. Les oeuvres suivantes:

Il suffit d'ajouter une cv2.waitKey(1) after cv2.destroyAllWindows().

Exemple:

import cv2
image = cv2.imread('my_image.jpg')
cv2.imshow('HSV image', hsv_image); cv2.waitKey(0); cv2.destroyAllWindows(); cv2.waitKey(1)
5
Julio

J'ai travaillé avec opencv 3.2 et matplotlib trop récemment et j'ai découvert (par essais et erreurs de commentaire) que l'importation de pyplot depuis matplotlib interfère avec la fonction cv2.imshow () Je ne sais pas pourquoi ni comment cela fonctionne vraiment, mais au cas où quelqu'un chercherait ce problème et rencontrerait ce vieux forum, cela pourrait aider. Je travaille pour essayer de trouver une solution autour de cette interférence bu

2
Madelyn A.

Si vous avez utilisé des cahiers Python, cv2.waitKey (0) et cv2.destroyallwindows () rencontrent un problème dans le système Unix pour exécuter un programme d'opencv.

J'ai une méthode alternative qui empêcherait de geler votre image

Étapes: -Copiez le code des cahiers python, créez un nouveau nom de fichier.py et collez-le - Ouvrez le terminal - chemin cd/dans/fichier - source, activez VirtualEnvironment - python nom_fichier.py

Cela exécutera le code directement à partir du terminal. J'espère que cela vous aide. Exemple de lien: https://youtu.be/8O-FW4Wm10s

0
R K Bhalodia

J'ai aussi fait face au même problème. Je cours en ligne de commande python Prompt dans centos 7 avec le code suivant

>> import cv2, numpy as np
>> cap=cv2.VideoCapture(0)
>> img=cap.read()
>> cap.release()
>> cv2.imshow('image',img[1])
>> cv2.waitKey(0)
>> cv2.destroyAllWindows()
>> cv2.waitKey(1)

Même à ce moment-là, le problème a persisté et n'a pas été résolu. Alors j'ai ajouté

>> cv2.imshow('image',img[1])

L'ajout de cette action ferme la fenêtre de l'image. Une nouvelle exécution de la commande créerait une nouvelle instance. J'espère que vous pourrez essayer si vous rencontrez toujours des problèmes.

0
shiva