comanda cv2.imshow nu funcționează corect în opencv-python (Programare, Python, Opencv, Procesarea Imaginilor)

top.eng a intrebat.

Folosesc opencv 2.4.2, python 2.7Codul simplu de mai jos a creat o fereastră cu numele corect, dar conținutul ei este doar gol și nu arată imaginea:

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

știe cineva despre această problemă?

Comentarii

  • Este posibil ca traseul fișierului dvs. să fie greșit. Windows folosește nu /. Nu sunt sigur dacă OpenCV tolerează / pe Windows? Dacă remedierea acestei probleme nu ajută, atunci asigurați-vă că imaginea dvs. se află în locația corectă și că este o imagine validă. –  > Por fmw42.
  • Există un tutorial cu elementele de bază ale citirii/prezentării imaginilor în docs.opencv.org/master/dc/d2e/tutorial_py_image_display.html –  > Por kon psych.
17 răspunsuri
berak

imshow() funcționează doar cu waitKey():

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

(Întreaga buclă de mesaje necesară pentru actualizarea ferestrei este ascunsă acolo.)

Comentarii

  • verificați print img tipărește un array numeric corect, nu un NoneType obiect. –  > Por Abid Rahman K.
  • Doar pentru a fi clar pentru posteritate, în condiții normale, acesta ar fi răspunsul corect. Omiterea waitKey va avea ca rezultat (de obicei) exact comportamentul descris în întrebare. –  > Por Snesticle.
  • Grozav. Acum, cum îl închid din consolă? –  > Por hans.
  • @hans – Încearcă cv2.destroyAllWindows() –  > Por Pawel Kranzberg.
Akhorus

Am găsit răspunsul care a funcționat pentru mine aici:http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html

Dacă executați o sesiune interactivă ipython și doriți să utilizați ferestrele highgui, faceți mai întâi cv2.startWindowThread().

În detaliu: HighGUI este o interfață simplificată pentru a afișa imagini și videoclipuri din codul OpenCV. Ar trebui să fie la fel de ușor ca:

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

Comentarii

  • Puteți să o închideți după aceea prin cv2.destroyAllWindows() –  > Por Zuza.
  • Pentru implementarea QT a highgui, startWindowThread() nu face nimic. github.com/opencv/opencv/blob/… –  > Por kusi.
AdityaIntwala

Trebuie să utilizați cv2.waitKey(0) după cv2.imshow("window",img). Numai atunci va funcționa.

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

Comentarii

  • Aș adăuga că s-ar putea să fie nevoie să instalați IDE-ul python pentru a afișa imaginea și, de asemenea, ar trebui să căutați fereastra uneori nu o afișează în față. Paranteza din cv2.waitKey() aș presupune că este în milsecundă și dacă o lași goală va afișa imaginea pentru totdeauna. –  > Por Ahmadiah.
Dharma

Dacă rulați în interiorul unei console Python, faceți acest lucru:

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

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

Apoi, dacă apăsați Enter pe imagine, se va închide cu succes imaginea și puteți continua să rulați alte comenzi.

rkdasari

M-am confruntat cu aceeași problemă. Am încercat să citesc o imagine din IDLE și am încercat să o afișez folosind cv2.imshow(), dar fereastra de afișare se blochează și afișează pythonw.exe nu răspunde atunci când încerc să închid fereastra.

Postarea de mai jos oferă o posibilă explicație pentru motivul pentru care se întâmplă acest lucru

pythonw.exe nu răspunde

În principiu, nu faceți acest lucru din IDLE. Scrieți un script și rulați-l din shell sau scriptul direct dacă este în windows, numindu-l cu extensia .pyw și dând dublu click pe el. Se pare că există un conflict între bucla de evenimente proprie lui IDLE și cele din toolkit-urile GUI.

Când am folosit imshow() într-un script și l-am executat, în loc să îl execut direct peste IDLE, a funcționat.

Comentarii

  • Vă rugăm să adăugați explicația furnizată la link (un minim măcar) pentru că link-urile pot deveni vechi… Mulțumesc 🙂 –  > Por achedeuzot.
  • Bump deoarece aceasta este problema pe care o am și eu dar… „nu face asta” nu este răspunsul pe care îl caut =) –  > Por Eric.
Pygirl

adaugă cv2.waitKey(0) în final.

Rambod

Pentru mine waitKey() cu un număr mai mare decât 0 a funcționat

    cv2.waitKey(1)

Minzey

Metoda 1:

Următorul cod a funcționat pentru mine.Doar adăugând destroyAllWindows() nu a închis fereastra. Adăugarea unui alt cv2.waitKey(1) la sfârșit a făcut treaba.

im = cv2.imread("./input.jpg")
cv2.imshow("image", im)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey(1)

credit : https://stackoverflow.com/a/50091712/8109630

Notă pentru începători:

  • Acest lucru va deschide imaginea într-o fereastră separată, în loc să o afișeze inline pe notebook. De aceea trebuie să folosim destroyAllWindows() pentru a o închide ulterior.
  • Așadar, dacă nu vedeți că apare o fereastră separată, verificați dacă aceasta se află în spatele ferestrei curente.
  • După ce vizualizați imaginea, apăsați o tastă pentru a închide fereastra apărută.

Metoda 2:

Dacă doriți să afișați pe caietul Jupyter.

from matplotlib import pyplot as plt
import cv2

im = cv2.imread("./input.jpg")
color = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
plt.imshow(color)
plt.title('Image')
plt.show()

iamchriskelley

Aveți toate piesele necesare undeva în acest fir de discuție:

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

funcționează bine pentru mine în IDLE.

Joseph

Dacă nu ați făcut acest lucru să funcționeze, ar fi bine să puneți

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

într-un singur fișier și să îl rulați.

Comentarii

  • (Răspunsul real aici este adăugarea de cv2.waitKey(0) declarație) – –  > Por Zimano.
Ravi Chandra Veeramachaneni

Nu are nevoie de nicio metodă suplimentară după waitKey(0) (răspuns pentru codul de mai sus)

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

Apare fereastra -> Faceți clic pe fereastră & Faceți clic pe Enter. Fereastra se va închide.

Itay Guy

Iată cum am rezolvat problema:

import cv2
from matplotlib import pyplot
    
img = cv2.imread('path')
pyplot.imshow(img)
pyplot.show()

CirculationDept

Am avut și eu o eroare -215. Am crezut că imshow era problema, dar când am schimbat imread pentru a citi într-un fișier inexistent nu am primit nici o eroare acolo. Așa că am pus fișierul imagine în folderul de lucru și am adăugat cv2.waitKey(0) și a funcționat.

Bob Bobster

acest lucru a rezolvat problema pentru mine, import pyautogui

Guilherme Girão

Dacă alegeți să folosiți „cv2.waitKey(0)”, asigurați-vă că ați scris „cv2.waitKey(0)” în loc de „cv2.waitkey(0)”, pentru că acel „k” minuscul ar putea bloca și programul dumneavoastră.

Comentarii

  • Metoda cu cheia minusculă nu există în API. Codul ar arunca o eroare deoarece metoda nu există. –  > Por rayryeng.
Alvaro Fernandez

eroare: (-215) size.width>0 && size.height>0 in function imshow

Această eroare este produsă deoarece imaginea nu este găsită. Deci nu este o eroare a funcției imshow.

Comentarii

  • Nu este relevantă pentru această întrebare. –  > Por rayryeng.
user3458364

Am avut aceeași eroare 215, pe care am reușit să o depășesc oferind calea completă a imaginii, ca în C:Folder1Folder2filename.ext

Comentarii

  • Ce „aceeași eroare 215”? Nicăieri în întrebarea lui OP nu este menționată vreo eroare. De asemenea, OP folosește o cale completă către imagine, așa că nu văd cum răspunde la întrebare. –  > Por Max Vollmer.