web-dev-qa-db-fra.com

cv2.imshow () bloque le noyau

J'exécute OpenCV via Jupyter Notebooks et chaque fois que j'essaie d'exécuter cv2.imshow (), le noyau se bloque, aucun message d'erreur ni indice utile - simplement

The Kernel appears to have died. It will restart automatically.

Voici le code que je lance ...

import cv2 
input = cv2.imread('images/input.jpg')
cv2.imshow('Hello World', input)
cv2.waitKey(0)
cv2.destroyAllWindows()

Le code fonctionne (bien que différemment) lorsque je lance le programme ci-dessous ...

%matplotlib inline
from matplotlib import pyplot as plt
import cv2
image = cv2.imread('images/input.jpg')
plt.imshow(image)
plt.show()

Pour info, j'utilise une copie de BitFusion totalement inchangée sur AWS.

https://aws.Amazon.com/marketplace/pp/B01EYKBEQ0?ref=cns_srchrow

Une idée de ce qui pourrait aller de travers?

9
Mike de H

Pour afficher des images avec cv2.imshow sur AWS, vous devez activer le transfert X11 afin que les graphiques puissent être exécutés sur le serveur et affichés localement. Cela peut être fait en utilisant ssh-ing avec l'option -Y:

ssh -Y username@hostname

Si les images sont plus grandes, vous devrez également compresser les données à l'aide de -C:

ssh -Y -C username@hostname

Le terminal utilisé pour ssh dans AWS devra rester ouvert tant que vous affichez des images du bloc-notes.

2
A Kruger

Je ne peux pas expliquer le comportement de votre code pour l'instant, mais vous pouvez utiliser le code ci-dessous pour obtenir le comportement ci-dessus.

%matplotlib inline
from matplotlib import pyplot as plt
import cv2
image = cv2.imread('images/input.jpg')
plt.imshow(image)
plt.show()
2
Puneet Jindal