2017-02-19 157 views
1

我無法用OpenCV在圖像上繪製矩形,然後使用matplotlib顯示圖像。顯示此代碼在黑色圖像的Jupyter筆記本電腦的結果,沒有綠色矩形:plt.imshow()沒有正確顯示numpy矩陣

import numpy as np 
import cv2 
import matplotlib.pyplot as plt 
import matplotlib.image as mpimg 

%matplotlib inline 
image = np.zeros((720, 1280, 3)) 
cv2.rectangle(image, (100,100), (200,200), color=(0,255,0), thickness=2) # Green 
plt.imshow(image) 

我相信我可以看到矩形,如果我顯示與cv2.imshow()的形象,但我不知道,OpenCV的圖像可以在Jupyter筆記本上內聯顯示,如matplotlib圖像。

編輯:我認爲,到底發生了什麼從the documentation在此摘錄解釋:

爲MxNx3和MxNx4浮標陣的每個組件的值應該是 範圍0.0至1.0。

如果它是整型數組,它可以處理0到255之間的值。

回答

4

通過當您使用np.zeros()np.ones()創建numpy的陣列默認情況下,矩陣的默認數據類型設置爲浮動,或更準確地說np.float64,而且似乎是在matplotlib一些問題渲染浮點矩陣數據類型(按約定的圖像中的RGB值始終是不可或缺的,所以我們不能將此歸咎於matplotlib。)

現在你有兩個選擇:

  • 創建np.uint8的numpy的矩陣數據類型

    image = np.zeros((720, 1280, 3), dtype = np.uint8) 
    
  • 在將整個矩陣轉換爲plt之前,將其轉換爲整型。

    image = np.astype(image, np.uint8) 
    

而且你需要在末尾添加plt.show()

+1

謝謝。順便說一句,我省略了'plt.show()',因爲我在Jupyter筆記本中,即使不調用該函數也會顯示圖像。在Jupyter筆記本之外,我的確需要這個函數調用。 – royco

+0

哦,那很好:) – ZdaR