Ответ 1
imshow()
работает только с waitKey()
:
import cv2
img = cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow', img)
cv2.waitKey()
(Весь цикл сообщений, необходимый для обновления окна, скрыт там.)
Я использую opencv 2.4.2, python 2.7 Следующий простой код создал окно с правильным именем, но его содержимое просто пустое и не отображает изображение:
import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow',img)
знает ли кто-нибудь об этой проблеме?
imshow()
работает только с waitKey()
:
import cv2
img = cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('ImageWindow', img)
cv2.waitKey()
(Весь цикл сообщений, необходимый для обновления окна, скрыт там.)
Я нашел ответ, который работал у меня здесь: 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)
Вы должны использовать cv2.waitKey(0)
после cv2.imshow("window",img)
. Только тогда это сработает.
import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)
Я столкнулся с той же проблемой. Я попытался прочитать изображение из IDLE и попытался отобразить его с помощью cv2.imshow()
, но окно просмотра зависает и показывает, что pythonw.exe
не отвечает при попытке закрыть окно.
Сообщение ниже дает возможное объяснение того, почему это происходит
"В принципе, не делайте этого из IDLE. Напишите script и запустите его из оболочки или script напрямую, если в Windows, назвав его расширением .pyw и дважды щелкнув по нему. по-видимому, конфликт между собственным циклом событий IDLE и инструментами из графических интерфейсов GUI.
Когда я использовал imshow()
в script и выполнял его, а не запускал его непосредственно через IDLE, он работал.
Если вы работаете внутри консоли Python, выполните следующие действия:
img = cv2.imread("yourimage.jpg")
cv2.imshow("img", img); cv2.waitKey(0); cv2.destroyAllWindows()
Затем, если вы нажмете Enter на изображении, он успешно закроет изображение, и вы можете продолжить выполнение других команд.
добавьте cv2.waitKey(0)
в конце.
У меня была аналогичная проблема и она была решена с помощью удаления
import gtk, pygtk # remove these
Я использую Linux, поэтому может быть и то, что gtk не будет работать. Я собирался использовать его, чтобы получить размер экрана, чтобы поместить два показанных изображения рядом друг с другом, но я предполагаю, что мне нужно сделать другой способ сделать это. Hardcoded это 1920x1080 на данный момент..
У вас есть все необходимые фрагменты в этом потоке:
if cv2.waitKey(): cv2.destroyAllWindows()
отлично работает для меня в IDLE.
Если вы решите использовать "cv2.waitKey(0)", убедитесь, что вы написали "cv2.waitKey(0)" вместо "cv2.waitkey(0)", потому что этот строчный "k" может зависнуть ваша программа тоже.
Если вы не сделали это, лучше поместите
import cv2
img=cv2.imread('C:/Python27/03323_HD.jpg')
cv2.imshow('Window',img)
cv2.waitKey(0)
в один файл и запустите его.
У меня работает waitKey() с номером больше 0
cv2.waitKey(1)
Я использовал 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()
ошибка: (-215) size.width> 0 && size.height> 0 в функции imshow
Эта ошибка вызвана тем, что изображение не найдено. Так что это не ошибка функции imshow.