Команда cv2.imshow не работает должным образом в opencv-python

Я использую opencv 2.4.2, python 2.7 Следующий простой код создал окно с правильным именем, но его содержимое просто пустое и не отображает изображение:

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

знает ли кто-нибудь об этой проблеме?

Ответ 1

imshow() работает только с waitKey():

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

(Весь цикл сообщений, необходимый для обновления окна, скрыт там.)

Ответ 2

Я нашел ответ, который работал у меня здесь: http://txt.arboreus.com/2012/07/11/highgui-opencv-window-from-ipython.html

Если вы запустите интерактивный сеанс ipython и хотите использовать highgui windows, do cv2.startWindowThread() сначала.

Подробнее: HighGUI - это упрощенный интерфейс для отображения изображений и видео из кода OpenCV. Это должно быть так просто:

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

Ответ 3

Вы должны использовать cv2.waitKey(0) после cv2.imshow("window",img). Только тогда это сработает.

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

Ответ 4

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

Сообщение ниже дает возможное объяснение того, почему это происходит

pythonw.exe не отвечает

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

Когда я использовал imshow() в script и выполнял его, а не запускал его непосредственно через IDLE, он работал.

Ответ 5

Если вы работаете внутри консоли Python, выполните следующие действия:

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

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

Затем, если вы нажмете Enter на изображении, он успешно закроет изображение, и вы можете продолжить выполнение других команд.

Ответ 6

добавьте cv2.waitKey(0) в конце.

Ответ 7

У меня была аналогичная проблема и она была решена с помощью удаления

import gtk, pygtk  # remove these

Я использую Linux, поэтому может быть и то, что gtk не будет работать. Я собирался использовать его, чтобы получить размер экрана, чтобы поместить два показанных изображения рядом друг с другом, но я предполагаю, что мне нужно сделать другой способ сделать это. Hardcoded это 1920x1080 на данный момент..

Ответ 8

У вас есть все необходимые фрагменты в этом потоке:

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

отлично работает для меня в IDLE.

Ответ 9

Если вы решите использовать "cv2.waitKey(0)", убедитесь, что вы написали "cv2.waitKey(0)" вместо "cv2.waitkey(0)", потому что этот строчный "k" может зависнуть ваша программа тоже.

Ответ 10

Если вы не сделали это, лучше поместите

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

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

Ответ 11

У меня работает waitKey() с номером больше 0

    cv2.waitKey(1)

Ответ 12

Я использовал openCV с pyplot и смог получить изображение для рендеринга в текущем окне jupyter с помощью pyplots imshow и шоу.

    import matplotlib.pyplot as plt
    import matplotlib.image as mpimg

    # First, we need to read in an image
    image = mpimg.imread('my_image.jpg')
    plt.imshow(image)

    # then using openCV algorithms on the image, e.g. grey scale
    import cv2 
    gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) #grayscale conversion

    # finally output the result through pyplot in the current window
    plt.imshow(gray, cmap='gray')
    plt.show()

Ответ 13

ошибка: (-215) size.width> 0 && size.height> 0 в функции imshow

Эта ошибка вызвана тем, что изображение не найдено. Так что это не ошибка функции imshow.