plt.imshow()没有正确显示numpy矩阵

时间:2017-02-19 06:57:18

标签: python-3.x opencv matplotlib

我在使用OpenCV在图像上绘制矩形时遇到问题,然后使用matplotlib显示图像。 Jupyter Notebook中的此代码会显示黑色图像,没有绿色矩形:

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之间的值。

1 个答案:

答案 0 :(得分:4)

默认情况下,使用np.zeros()np.ones()创建numpy数组时,矩阵的默认数据类型设置为float,或更精确地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()