web-dev-qa-db-fra.com

la commande cv2.imshow ne fonctionne pas correctement dans opencv-python

J'utilise opencv 2.4.2, python 2.7 Le code simple suivant a créé une fenêtre du nom correct, mais son contenu est tout simplement vide et ne montre pas l'image:

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)

est-ce que quelqu'un sait ce problème?

66
top.eng

imshow() ne fonctionne qu'avec waitKey():

import cv2
img = cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow', img)
cv2.waitKey()

(La totalité de la boucle de message nécessaire à la mise à jour de la fenêtre est masquée ici.)

157
berak

J'ai trouvé la réponse qui a fonctionné pour moi ici: http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html

Si vous exécutez une session interactive ipython et souhaitez utiliser highgui Windows, faites cv2.startWindowThread () en premier.

En détail: HighGUI est une interface simplifiée pour afficher des images et vidéo de code OpenCV. Cela devrait être aussi simple que:

import cv2
img = cv2.imread("image.jpg")
cv2.startWindowThread()
cv2.namedWindow("preview")
cv2.imshow("preview", img)
30
Akhorus

Vous devez utiliser cv2.waitKey(0) après cv2.imshow("window",img). Alors seulement, ça marchera.

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)
19
AdityaIntwala

J'ai fait face au même problème. J'ai essayé de lire une image d'IDLE et de l'afficher à l'aide de cv2.imshow(), mais la fenêtre d'affichage se fige et indique que pythonw.exe ne répond pas lorsque vous essayez de fermer la fenêtre.

Le post ci-dessous donne une explication possible de la raison pour laquelle cela se produit

pythonw.exe ne répond pas

"En gros, ne le faites pas depuis IDLE. Écrivez un script et exécutez-le directement à partir du shell ou du script, s'il est dans Windows, en le nommant avec une extension .pyw et en double-cliquant dessus. Il y a apparemment un conflit entre les sa propre boucle d’événement et celles des toolkits GUI. "

Lorsque j'ai utilisé imshow() dans un script et que je l'exécute plutôt que de l'exécuter directement sur IDLE, cela a fonctionné. 

7
rkdasari

Si vous utilisez une console Python, procédez comme suit:

img = cv2.imread("yourimage.jpg")

cv2.imshow("img", img); cv2.waitKey(0); cv2.destroyAllWindows()

Ensuite, si vous appuyez sur Enter sur l'image, l'image sera fermée avec succès et vous pourrez continuer à exécuter d'autres commandes.

6
Dharma

ajoutez cv2.waitKey(0) à la fin.

3
Pygirl

Vous avez toutes les pièces nécessaires quelque part dans ce fil:

if cv2.waitKey(): cv2.destroyAllWindows()

fonctionne bien pour moi dans IDLE.

3
iamchriskelley

Si vous n’avez pas fait fonctionner cela, vous feriez mieux de mettre

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)

dans un fichier et exécutez-le.

1
Joseph

Pour moi, waitKey () avec un nombre supérieur à 0 a travaillé

    cv2.waitKey(1)
1
RamG

Si vous choisissez d'utiliser "cv2.waitKey (0)", assurez-vous d'avoir écrit "cv2.waitKey (0)" au lieu de "cv2.waitkey (0)", car ce minuscule "k" pourrait également geler votre programme .

1
Guilherme Girão

erreur: (-215) size.width> 0 && size.height> 0 dans la fonction imshow

Cette erreur est générée car l'image n'est pas trouvée. Donc, ce n'est pas une erreur de la fonction imshow.

0
Alvaro Fernandez