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?


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


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)

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)

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.


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.


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


4

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

    cv2.waitKey(1)

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.


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.


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.


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 .


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.


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


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.