Perintah cv2.imshow tidak berfungsi dengan baik di opencv-python

111

Saya menggunakan opencv 2.4.2, python 2.7 Kode sederhana berikut membuat jendela dengan nama yang benar, tetapi isinya hanya kosong dan tidak menampilkan gambar:

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

apakah ada yang tahu tentang masalah ini?

top.eng
sumber
Jalur file Anda mungkin salah. Windows menggunakan \ bukan /. Saya tidak yakin apakah OpenCV mentolerir / di Windows? Jika perbaikan tidak membantu, pastikan gambar Anda berada di lokasi yang benar dan merupakan gambar yang valid.
fmw42
Ada tutorial dengan dasar-dasar membaca / menampilkan gambar di docs.opencv.org/master/dc/d2e/tutorial_py_image_display.html
kon psych

Jawaban:

228

imshow()hanya bekerja dengan waitKey():

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

(Seluruh lingkaran pesan yang diperlukan untuk memperbarui jendela tersembunyi di sana.)

berak
sumber
3
check print imgmencetak array numpy yang benar, bukan NoneTypeobjek.
Abid Rahman K
7
Agar jelas bagi anak cucu, dalam keadaan normal ini adalah jawaban yang benar. Menghilangkan waitKey akan (biasanya) menghasilkan perilaku yang persis seperti yang dijelaskan dalam pertanyaan.
Snesticle
45

Saya menemukan jawaban yang berhasil untuk saya di sini: http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html

Jika Anda menjalankan sesi ipython interaktif, dan ingin menggunakan jendela highgui, lakukan cv2.startWindowThread () terlebih dahulu.

Secara rinci: HighGUI adalah antarmuka yang disederhanakan untuk menampilkan gambar dan video dari kode OpenCV. Ini harus semudah:

import cv2
img = cv2.imread("image.jpg")
cv2.startWindowThread()
cv2.namedWindow("preview")
cv2.imshow("preview", img)
Akhorus
sumber
7
Anda dapat menutupnya setelahnya dengan cv2.destroyAllWindows ()
Zuza
Untuk implementasi QT highgui, startWindowThread () tidak melakukan apa pun. github.com/opencv/opencv/blob/…
kusi
24

Anda harus menggunakan cv2.waitKey(0)setelah cv2.imshow("window",img). Hanya dengan begitu itu akan berhasil.

import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)
AdityaIntwala
sumber
Saya akan menambahkan Anda mungkin perlu menginstal IDE python untuk menampilkan gambar dan Anda juga harus mencari jendela terkadang tidak menampilkannya di depan. Tanda kurung di cv2.waitKey () saya anggap dalam milsecond dan jika dibiarkan kosong, gambar akan ditampilkan selamanya.
Ahmadiah
11

Jika Anda menjalankan di dalam konsol Python, lakukan ini:

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

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

Kemudian jika Anda menekan Entergambar, gambar akan berhasil ditutup dan Anda dapat melanjutkan menjalankan perintah lain.

Dharma
sumber
7

Saya menghadapi masalah yang sama. Saya mencoba membaca gambar dari IDLE dan mencoba menampilkannya menggunakan cv2.imshow(), tetapi jendela tampilan membeku dan tayangan pythonw.exetidak merespons ketika mencoba menutup jendela.

Posting di bawah ini memberikan penjelasan yang mungkin mengapa ini terjadi

pythonw.exe tidak merespons

" Pada dasarnya, jangan lakukan ini dari IDLE. Tulis skrip dan jalankan dari shell atau skrip langsung jika di windows, dengan menamainya dengan ekstensi .pyw dan mengklik dua kali. Tampaknya ada konflik antara acara IDLE sendiri loop dan yang dari toolkit GUI. "

Ketika saya menggunakan imshow()skrip dan menjalankannya daripada menjalankannya langsung di IDLE, itu berhasil.

rkdasari
sumber
Silakan tambahkan penjelasan yang diberikan di tautan (minimal) karena tautan bisa basi ... Terima kasih :)
achedeuzot
Benjolan karena ini adalah masalah yang saya miliki tetapi ... "jangan lakukan ini" bukanlah jawaban yang saya cari =)
Eric
7

tambahkan cv2.waitKey(0)pada akhirnya.

Pygirl
sumber
4

Bagi saya waitKey () dengan angka lebih besar dari 0 berhasil

    cv2.waitKey(1)
Rambod
sumber
3

Anda memiliki semua bagian yang diperlukan di suatu tempat di utas ini:

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

berfungsi dengan baik untuk saya di IDLE.

iamchriskelley
sumber
3

Jika Anda belum membuat ini bekerja, lebih baik Anda meletakkannya

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

menjadi satu file dan menjalankannya.

Joseph
sumber
1

Tidak memerlukan metode tambahan setelah waitKey(0)(balas untuk kode di atas)

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

Jendela muncul -> Klik pada Jendela & Klik Enter. Jendela akan tertutup.

Ravi Chandra Veeramachaneni
sumber
0

Jika Anda memilih untuk menggunakan "cv2.waitKey (0)", pastikan Anda telah menulis "cv2.waitKey (0)" daripada "cv2.waitkey (0)", karena huruf kecil "k" itu mungkin akan membekukan program Anda juga .

Guilherme Girão
sumber
3
Metode dengan kunci huruf kecil tidak ada di API. Kode akan menimbulkan kesalahan karena metode tersebut tidak ada.
rayryeng
0

Saya juga mengalami kesalahan -215. Saya pikir imshow adalah masalahnya, tetapi ketika saya mengubah imread menjadi membaca di file yang tidak ada, saya tidak mendapat kesalahan di sana. Jadi saya meletakkan file gambar di folder kerja dan menambahkan cv2.waitKey (0) dan itu berhasil.

CirculationDept
sumber
-1

kesalahan: (-215) size.width> 0 && size.height> 0 dalam fungsi imshow

Kesalahan ini terjadi karena gambar tidak ditemukan. Jadi ini bukan kesalahan fungsi imshow.

Alvaro Fernandez
sumber
Tidak relevan dengan pertanyaan ini.
rayryeng
-1

Saya memiliki kesalahan 215 yang sama, yang dapat saya atasi dengan memberikan path lengkap ke gambar, seperti di, C: \ Folder1 \ Folder2 \ filename.ext

pengguna3458364
sumber
Apa "kesalahan 215 yang sama"? Tidak ada tempat dalam pertanyaan OP adalah kesalahan yang disebutkan. OP juga menggunakan jalur lengkap ke gambar, jadi saya tidak melihat bagaimana ini menjawab pertanyaan.
Max Vollmer