OpenCV imshow не отвечает

#opencv #pycharm #operating-system #spyder #python-3.8

#opencv #pycharm #операционная система #spyder #python-3.8

Вопрос:

У меня есть небольшая test.py код ниже

 import cv2

image = cv2.imread("sample.png")
print(image) #not None

cv2.imshow("Photo", image)

cv2.waitKey()
cv2.destroyAllWindows()
 

Я запускаю виртуальную среду на Pycharm с установленным opencv.
Версия Python — 3.8.6

Однако, когда я запускаю либо python test.py или python3 test.py в терминале Pycharm, появляется панель запуска Python, но она просто не отвечает и не показывает никаких фотографий.

Это то, что он показывает на фото

Кто-нибудь сталкивался с такой же проблемой?

Обновление: я думаю, что это связано с Pycharm, я попробовал еще раз с Spyder на Anadconda, и он работает нормально. Появляются окна.

Ответ №1:

Если вы посмотрите на документацию, waitKey ожидает нажатия клавиши.

Однако вы не указали никакой задержки в своем waitKey .

задержка Задержка в миллисекундах. 0 — это специальное значение, которое означает «навсегда».

Поэтому, если вы укажете waitKey(0) , изображение будет отображаться вечно (пока вы не нажмете кнопку).

Код:


 import cv2

image = cv2.imread("sample.png")
print(image) #not None

cv2.imshow("Photo", image)

cv2.waitKey(0)  # delay 0
cv2.destroyAllWindows()
 

Комментарии:

1. Спасибо, я тоже пробовал, но не думаю, что это работает.

2. Вы пробовали с другими параметрами? кроме 0?

3. Если if не печатается после imshow (см. Обсуждение Ниже), кажется, что он не доходит до waitKey. Я запустил программу с Pycharm community edition, и все было в порядке. cv2.waitKey() действует как (0), он просто ждет нажатия, но при постановке вопроса изображение вообще не появляется? Я подозреваю, что в библиотеке Highgui могут отсутствовать зависимости или что-то в этом роде.

Ответ №2:

Редактировать: я подозреваю, что отсутствуют или нарушены зависимости для модуля Highgui — либо GTK, QT; или даже OpenCV, не созданный с их поддержкой?

Можете ли вы включить строку:

print(cv2.getBuildInformation())

в вашем коде и увидеть раздел графического интерфейса вывода?

Для Windows это:

 GUI: 
    Win32 UI:                    YES
    OpenGL support:              YES (opengl32 glu32)
    VTK support:                 NO
 

Смотрите комментарии и ссылку ниже: https://docs.opencv.org/master/db/d05/tutorial_config_reference.html

введите описание изображения здесь

Вы говорите, что это не None, но пробовали ли вы использовать абсолютный путь к фотографии, находится ли он в той же папке, где PyCharm будет искать?

Вы пытались запустить его из командной строки системной консоли, когда находитесь в каталоге образа?

Редактировать: Кроме того, если кажется, что изображение загружается, но не отображается, попробуйте сохранить его: cv2.imwrite («save.png», изображение)

Кроме того, если вы добавите print() после cv2.imshow(), отображается ли вывод?

Кстати, другим возможным источником проблем может быть настройка виртуальной среды и т.д. при создании нового проекта:

введите описание изображения здесь

Комментарии:

1. вы пробовали использовать абсолютный путь к фотографии, находится ли он в той же папке, где PyCharm будет искать? Да, я это сделал. Вы пытались запустить его из оболочки системной консоли, когда вы находитесь в каталоге образа? Да, я тоже это сделал, но та же проблема остается. если кажется, что изображение загружается, но не отображается, попробуйте сохранить его: cv2.imwrite («save.png», изображение) -> Да, оно сохранило изображение в новое изображение. если вы добавите print() после cv2.imshow(), отображается ли результат? -> Нет, он не будет печатать. Похоже, что программирование зависает при попытке запустить python launcher, но оно не отвечает.

2. Если он не печатается после imshow, то, возможно, cv2.imshow зависает, что заставляет меня подозревать библиотеку HighGui, может быть, какая-то зависимость отсутствует? Qt? OpenCV имеет много опций во время сборки. Вы пробовали использовать другие примеры программ, которые просто опускают imshow / GUI и сохраняют вывод? Например. изображение = cv2.cvtColor(изображение, cv2.COLOR_BGR2GRAY) sobelX = cv2.Sobel(изображение, cv2.CV_64F, 1, 0) sobelY = cv2.Sobel(изображение, cv2.CV_64F, 0, 1) sobelX = np.uint8(np.absolute(sobelX))sobelY = np.uint8(np.absolute(sobelY)) sobelCombined = cv2.bitwise_or(sobelX, sobelY) cv2.line(изображение, (0,0), (40,40), 255, 3)

3. Highgui может быть основан на GTK (по умолчанию включен) или Qt, в зависимости от параметров во время компиляции: docs.opencv.org/master/db/d05/tutorial_config_reference.html «Серверные части графического интерфейса (модуль highgui) OpenCV полагаются на различные библиотеки графического интерфейса для рисования окон. Опция Описания платформы по умолчанию с ПОМОЩЬЮ_GTK В Linux GTK — это распространенный инструментарий в Linux и Unix-подобных ОС. По умолчанию в случае обнаружения будет использоваться версия 3, версия 2 может быть принудительно установлена с помощью опции WITH_GTK_2_X . WITH_QT OFF Кроссплатформенный Qt — это кроссплатформенный графический интерфейс. »

4. Кстати, что вы подразумеваете под «Python launcher»? Исполняемый файл Python? Если изображение было успешно прочитано и сохранено и т.д., то интерпретатор Python был запущен и запущен. Я думаю, что «Не отвечает» типично для проблем с графическим интерфейсом.

5. Ах, теперь ты говоришь HighGui, я начну разбираться. Спасибо!