cv2.imshow komutu opencv-python'da düzgün çalışmıyor


112

Opencv 2.4.2, python 2.7 kullanıyorum Aşağıdaki basit kod, doğru adda bir pencere oluşturdu, ancak içeriği boş ve resmi göstermiyor:

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

bu konuyu bilen var mı?


Dosya yolunuz yanlış olabilir. Windows \ kullanmaz /. OpenCV'nin Windows'a tolerans gösterip göstermediğinden emin değilim? Bu sorunu çözmüyorsa, görüntünüzün doğru konumda olduğundan ve geçerli bir görüntü olduğundan emin olun.
fmw42

Yanıtlar:


228

imshow()sadece şunlarla çalışır waitKey():

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

(Pencereyi güncellemek için gereken mesaj döngüsünün tamamı burada gizlidir.)


3
check print imgbir NoneTypenesne değil, doğru bir numpy dizisi yazdırır .
Abid Rahman K

7
Gelecek nesiller için açık olmak gerekirse, normal şartlar altında bu doğru cevap olacaktır. WaitKey'in atlanması (genellikle) tam olarak soruda açıklanan davranışa neden olur.
Snesticle

45

Benim için işe yarayan cevabı burada buldum: http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html

Etkileşimli bir ipython oturumu çalıştırırsanız ve highgui pencereleri kullanmak istiyorsanız, önce cv2.startWindowThread () işlemini yapın.

Ayrıntılı olarak: HighGUI, OpenCV kodundan görüntüleri ve videoları görüntülemek için basitleştirilmiş bir arayüzdür. O kadar kolay olmalı:

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

7
Daha sonra cv2.destroyAllWindows ()
Zuza

Highgui'nin QT uygulaması için startWindowThread () hiçbir şey yapmaz. github.com/opencv/opencv/blob/…
kusi

24

Sen kullanmalısınız cv2.waitKey(0)sonra cv2.imshow("window",img). Ancak o zaman işe yarayacak.

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

Eklemek isterim ki, görüntüyü görüntülemek için python IDE'yi kurmanız gerekebilir ve ayrıca pencereyi de aramalısınız, bazen ön tarafta göstermiyor. Cv2.waitKey () deki parantezin milisaniye olduğunu varsayacağım ve boş bırakırsanız, görüntüyü sonsuza kadar gösterecektir.
Ahmadiah

11

Bir Python konsolunun içinde çalışıyorsanız, şunu yapın:

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

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

Ardından Entergörüntüye basarsanız , görüntü başarıyla kapatılır ve diğer komutları çalıştırmaya devam edebilirsiniz.


7

Ben de aynı sorunla karşılaştım. IDLE'den bir görüntü okumaya ve kullanarak görüntülemeye çalıştım cv2.imshow(), ancak pencereyi pythonw.exekapatmaya çalışırken ekran penceresi donuyor ve gösteriler yanıt vermiyor.

Aşağıdaki gönderi, bunun neden olduğuna dair olası bir açıklama verir.

pythonw.exe yanıt vermiyor

" Temel olarak, bunu IDLE'den yapmayın. Bir komut dosyası yazın ve onu bir .pyw uzantısıyla adlandırarak ve çift tıklayarak, kabuktan veya doğrudan pencerelerdeyse komut dosyasını çalıştırın. Görünüşe göre IDLE'nin kendi olayı arasında bir çakışma var döngü ve GUI araç setlerinden olanlar. "

Bir imshow()betikte kullandığımda ve doğrudan IDLE üzerinden çalıştırmak yerine çalıştırdığımda işe yaradı.


Lütfen bağlantıda verilen açıklamayı ekleyin (en azından), çünkü bağlantılar eski olabilir ... Teşekkürler :)
achedeuzot

Karşılaştığım sorun bu olduğundan ama ... "bunu yapma" aradığım cevap değil =)
Eric


4

Benim için waitKey () 0'dan büyük sayı ile çalıştı

    cv2.waitKey(1)

3

Bu konudaki tüm gerekli parçalara sahipsiniz:

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

IDLE'de benim için iyi çalışıyor.


3

Bunu çalıştırmadıysanız, daha iyi koymalısınız

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

tek bir dosyaya koyun ve çalıştırın.


1

Sonrasında herhangi bir ek yönteme ihtiyaç duymaz waitKey(0)(yukarıdaki kodu yanıtlayın)

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

Pencere açılır -> Pencereye tıklayın ve Enter'a tıklayın. Pencere kapanacak.


1

Yöntem 1:

Aşağıdaki kod benim için çalıştı. Sadece destroyAllWindows () eklemek pencereyi kapatmadı. Sonunda başka bir cv2.waitKey (1) eklemek işi yaptı.

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

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

Yeni başlayanlar için not:

  • Bu, görüntüyü not defterinde satır içi olarak görüntülemek yerine ayrı bir pencerede açacaktır. Bu yüzden daha sonra kapatmak için destroyAllWindows () 'u kullanmalıyız.
  • Bu nedenle, ayrı bir pencere açılmazsa, mevcut pencerenizin arkasında olup olmadığını kontrol edin.
  • Resmi görüntüledikten sonra, açılan pencereyi kapatmak için bir tuşa basın.

Yöntem 2:

Jupyter not defterinde görüntülemek istiyorsanız.

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

0

"Cv2.waitKey (0)" kullanmayı seçerseniz, "cv2.waitkey (0)" yerine "cv2.waitKey (0)" yazdığınızdan emin olun, çünkü bu küçük "k" harfi programınızı da dondurabilir .


3
Küçük harf anahtarına sahip yöntem API'de mevcut değil. Yöntem mevcut olmadığından kod bir hata verir.
rayryeng

0

Ayrıca -215 hatası aldım. Sorunun imshow olduğunu düşündüm, ancak var olmayan bir dosyada okumak için imread'i değiştirdiğimde orada bir hata almadım. Bu yüzden resim dosyasını çalışma klasörüne koydum ve cv2.waitKey (0) ekledim ve çalıştı.


-1

error: (-215) size.width> 0 && size.height> 0 işlevinde imshow

Bu hata, görüntü bulunamadığı için üretilir. Yani imshow işlevinin bir hatası değil.


Bu soruyla ilgili değil.
rayryeng

-1

C: \ Folder1 \ Folder2 \ filename.ext örneğindeki gibi görüntünün tam yolunu vererek üstesinden gelebildiğim aynı 215 hatasını aldım.


Ne "aynı 215 hatası"? OP'lerin hiçbir yerinde söz konusu hata yoktur. Ayrıca OP, görüntünün tam yolunu kullanıyor, bu yüzden bunun soruyu nasıl yanıtladığını anlamıyorum.
Max Vollmer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.