it-swarm.com.de

der Befehl cv2.imshow funktioniert in opencv-python nicht ordnungsgemäß

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?

66
top.eng

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.)

157
berak

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)
30
Akhorus

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)
19
AdityaIntwala

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

pythonw.exe antwortet nicht

"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. 

7
rkdasari

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.

6
Dharma

füge am Ende cv2.waitKey(0) hinzu.

3
Pygirl

Sie haben alle notwendigen Teile irgendwo in diesem Thread:

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

funktioniert gut für mich in IDLE.

3
iamchriskelley

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.

1
Joseph

Bei mir hat waitKey () mit der Nummer größer als 0 funktioniert

    cv2.waitKey(1)
1
RamG

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 .

1

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.

0