2014-02-16 4 views
51

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

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

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

ответ

116

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

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

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

+1

Тпх, но до сих пор не работает ... –

+0

Что happended сейчас? еще одна проблема? добавьте больше деталей пожалуйста. –

+0

есть. содержимое остается пустым @AbidRahmanK –

6

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

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

pythonw.exe is not responding

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

Когда я imshow() в сценарии и выполнить его а не ru он работал непосредственно над IDLE, он работал.

+0

Пожалуйста, добавьте объяснение, предоставленное по ссылке (минимум как минимум), потому что ссылки могут устаревать. .. Спасибо :) – achedeuzot

+0

Bump, так как это проблема, которую я имею ... «не делай этого» - это не тот ответ, который я ищу =) – Eric

22

Я нашел ответ, который работал для меня здесь: 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) 
+3

Вы можете закрыть его позже cv2.destroyAllWindows() – Zuza

15

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

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

Я имел подобную иш проблему и решить ее удаления

import gtk, pygtk # remove these 

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

+0

нет помогая кому-то –

2

У вас есть все необходимые части где-то в этой теме:

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

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

0

Если вы не сделали эту работу, вы лучше положить

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

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

0

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

-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's 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() 
+0

не отвечать на вопрос о qu – Kulbear

Смежные вопросы