Ich verwende opencv 2.4.2, Python 2.7 ..... Der folgende einfache Code hat ein Fenster mit dem richtigen Namen erstellt, der Inhalt ist jedoch leer und zeigt das Bild nicht:
import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)
weiß jemand über dieses Problem?
imshow()
funktioniert nur mit waitKey()
:
import cv2
img = cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow', img)
cv2.waitKey()
(Die gesamte zum Aktualisieren des Fensters erforderliche Meldungsschleife ist dort versteckt.)
Ich fand die Antwort, die für mich funktioniert hat: http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html
Wenn Sie eine interaktive ipython-Sitzung ausführen und highgui .__ verwenden möchten. Windows, tun Sie zuerst cv2.startWindowThread ().
Im Detail: HighGUI ist eine vereinfachte Benutzeroberfläche zur Anzeige von Bildern und Video aus dem OpenCV-Code. Es sollte so einfach sein wie:
import cv2
img = cv2.imread("image.jpg")
cv2.startWindowThread()
cv2.namedWindow("preview")
cv2.imshow("preview", img)
Sie müssen cv2.waitKey(0)
nach cv2.imshow("window",img)
verwenden. Nur dann wird es funktionieren.
import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)
Ich stand vor demselben Problem. Ich habe versucht, ein Bild von IDLE zu lesen, und habe versucht, es mit cv2.imshow()
anzuzeigen, aber das Anzeigefenster bleibt stehen und zeigt, dass pythonw.exe
beim Versuch, das Fenster zu schließen, nicht reagiert.
Der folgende Beitrag gibt eine mögliche Erklärung dafür, warum dies geschieht
"Grundsätzlich machen Sie dies nicht von IDLE aus. Schreiben Sie ein Skript und führen Sie es direkt aus der Shell oder dem Skript in Windows aus, indem Sie es mit der Erweiterung .pyw benennen und darauf doppelklicken. Es besteht anscheinend ein Konflikt zwischen IDLEs eigene Ereignisschleife und die von GUI-Toolkits. "
Wenn ich imshow()
in einem Skript verwendet und ausgeführt habe, anstatt es direkt über IDLE auszuführen, hat es funktioniert.
Wenn Sie in einer Python-Konsole ausgeführt werden, gehen Sie folgendermaßen vor:
img = cv2.imread("yourimage.jpg")
cv2.imshow("img", img); cv2.waitKey(0); cv2.destroyAllWindows()
Dann, wenn Sie drücken Enter Auf dem Bild wird das Bild erfolgreich geschlossen, und Sie können andere Befehle ausführen.
füge am Ende cv2.waitKey(0)
hinzu.
Sie haben alle notwendigen Teile irgendwo in diesem Thread:
if cv2.waitKey(): cv2.destroyAllWindows()
funktioniert gut für mich in IDLE.
Wenn Sie dies nicht funktionieren lassen, legen Sie besser fest
import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)
in eine Datei und führen Sie es aus.
Bei mir hat waitKey () mit der Nummer größer als 0 funktioniert
cv2.waitKey(1)
Wenn Sie "cv2.waitKey (0)" verwenden, stellen Sie sicher, dass Sie "cv2.waitKey (0)" anstelle von "cv2.waitkey (0)" geschrieben haben, da das Kleinbuchstabe "k" auch Ihr Programm einfrieren kann .
Fehler: (-215) size.width> 0 && size.height> 0 in Funktion imshow
Dieser Fehler wird erzeugt, weil das Bild nicht gefunden wird. Es ist also kein Fehler der imshow-Funktion.