2014-02-16 349 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

tnx但仍然不起作用... –

+0

現在發生了什麼?還是同樣的問題?請添加更多細節。 –

+0

是的。仍然內容爲空@AbidRahmanK –

6

我面臨着同樣的問題。我嘗試從IDLE讀取圖像,並嘗試使用cv2.imshow()來顯示它,但顯示窗口凍結並顯示pythonw.exe在嘗試關閉窗口時未響應。

下後給出了爲什麼發生這種情況

pythonw.exe is not responding

基本上是一個可能的解釋,不從IDLE做到這一點。寫一個腳本,並從殼或直接在腳本運行如果在窗口中,用.pyw擴展名命名並雙擊它,IDLE自己的事件循環和GUI工具包之間顯然存在衝突

當我在腳本中使用imshow()並執行它時而不是ru它直接通過IDLE,它工作。

+0

請添加鏈接提供的解釋(至少至少),因爲鏈接可能陳舊。 ..謝謝:) – achedeuzot

+0

凹凸,因爲這是我有的問題,但...「不這樣做」不是我要找的答案=) – 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.imshow("window",img)後使用cv2.waitKey(0)。只有這樣才能工作。

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將無法正常工作。 我打算用它來獲得屏幕大小,並排放置兩個顯示的圖像,但我想我必須想出另一種方式來做到這一點。硬編碼它1920×1080現在...

+0

關閉它幫助任何人 –

2

你已經得到了所有必要的部分地方在此線程:

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

工作正常,我在空閒狀態。

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,並能獲得使用圖像中pyplots imshow顯示jupyter的當前窗口進行渲染。

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

不應答op的quesstion – Kulbear