2017-02-19 424 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