Команда cv2.imshow не працює належним чином у opencv-python


111

Я використовую opencv 2.4.2, python 2.7 Наступний простий код створив вікно правильної назви, але його вміст просто порожній і не показує зображення:

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

хтось знає про це питання?


Ваш шлях до файлу може бути неправильним. Windows використовує \ not /. Я не впевнений, чи OpenCV терпить / у Windows? Якщо виправлення не допомагає, переконайтеся, що ваше зображення знаходиться в правильному місці та є дійсним зображенням.
fmw42

Є підручник з основами читання / відображення зображень у docs.opencv.org/master/dc/d2e/tutorial_py_image_display.html
kon psych

Відповіді:


228

imshow()працює лише з waitKey():

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

(Весь цикл повідомлень, необхідний для оновлення вікна, ховається там.)


3
чек print imgдрукує правильний масив, а не NoneTypeоб'єкт.
Абід Рахман К

7
Просто, щоб бути зрозумілим для нащадків, за звичайних обставин це була б правильна відповідь. Якщо вимкнути функцію waitKey (зазвичай), це призведе саме до поведінки, описаної у питанні.
Snesticle

45

Тут я знайшов відповідь, яка працювала на мене: http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html

Якщо ви запускаєте інтерактивний сеанс ipython і хочете використовувати вікна highgui, спочатку зробіть cv2.startWindowThread ().

Детально: HighGUI - це спрощений інтерфейс для відображення зображень та відео з коду OpenCV. Це повинно бути таким же простим, як:

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

7
Ви можете закрити його згодом, cv2.destroyAllWindows ()
Зуза

Для QT реалізації highgui, startWindowThread () нічого не робить. github.com/opencv/opencv/blob/…
kusi

24

Ви повинні використовувати cv2.waitKey(0)після cv2.imshow("window",img). Тільки тоді це спрацює.

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

Я б додав, що вам може знадобитися встановити пітон IDE для відображення зображення, і ви також повинні шукати вікно, іноді це не відображає його спереду. Дужки в cv2.waitKey () я б припустив, що це в секунду, і якщо ви залишите його порожнім, воно відображатиме зображення назавжди.
Ахмадія

11

Якщо ви працюєте всередині консолі Python, зробіть це:

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

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

Потім, якщо натиснути Enterна зображення, воно буде успішно закрити зображення, і ви можете продовжувати виконувати інші команди.


7

Я зіткнувся з тим же питанням. Я спробував прочитати зображення з IDLE і спробував відобразити його за допомогою cv2.imshow(), але вікно дисплея замерзає і показує pythonw.exe, що не реагує при спробі закрити вікно.

Пост нижче дає можливе пояснення того, чому це відбувається

pythonw.exe не відповідає

" В основному, не робіть цього з IDLE. Напишіть скрипт і запустіть його з оболонки або сценарію безпосередньо, якщо у Windows, назвавши його розширенням .pyw та подвійним клацанням по ньому. Мабуть, конфлікт між власною подією IDLE цикл та ті, що знаходяться в наборах інструментів GUI. "

Коли я використовував imshow()у скрипті і виконував його, а не запускав його безпосередньо над IDLE, він працював.


Будь ласка, додайте пояснення, надані за посиланням (як мінімум), оскільки посилання можуть
застаріти

Зрештою, бо це проблема, яку я маю, але ... "не роби цього" - це не відповідь, яку я шукаю =)
Ерік,


4

Для мене waitKey (), кількість яких більше 0 працювала

    cv2.waitKey(1)

3

У вас є всі необхідні фрагменти десь у цій темі:

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

добре працює для мене в IDLE.


3

Якщо ви цього не працювали, краще покладіть

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

в один файл і запустіть його.


1

Після цього не потрібні додаткові методи waitKey(0)(відповідь на вищевказаний код)

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

З'явиться вікно -> Клацніть вікно та натисніть клавішу Enter. Вікно закриється.


0

Якщо ви вирішите використовувати "cv2.waitKey (0)", будьте впевнені, що ви написали "cv2.waitKey (0)" замість "cv2.waitkey (0)", тому що цей малий регістр "k" може також заморозити вашу програму .


3
Метод за допомогою малого ключа не існує в API. Код видасть помилку, оскільки метод не існує.
rayryeng

0

У мене також була помилка -215. Я думав, що імшоу - це проблема, але коли я змінив непрочитаність на читання у неіснуючому файлі, я не помилився. Тому я помістив файл зображення у робочу папку і додав cv2.waitKey (0), і він спрацював.


-1

помилка: (-215) size.width> 0 && size.height> 0 у функції imshow

Ця помилка виникає через те, що зображення не знайдено. Тож це не помилка функції imshow.


Не має відношення до цього питання.
rayryeng

-1

У мене була та сама помилка 215, яку мені вдалося подолати, надавши повний шлях до зображення, як у, C: \ Folder1 \ Folder2 \ filename.ext


Яка «та сама помилка 215»? Ніде в ОП питання не згадується жодна помилка. Також OP використовує повний шлях до зображення, тому я не бачу, як це відповідає на питання.
Макс Волмер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.