我无法使用 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 图像可以像 matplotlib 图像一样在 Jupyter 笔记本中内联显示。
编辑:我认为真正发生的事情在 the documentation 的这段摘录中得到了解释。 :
The value for each component of MxNx3 and MxNx4 float arrays should be in the range 0.0 to 1.0.
如果它是整数数组,它可以处理 0 到 255 之间的值。
最佳答案
默认情况下,当您使用 np.zeros()
或 np.ones()
创建 numpy 数组时,矩阵的默认数据类型设置为 float ,或者更准确地说是 np.float64
,并且在 matplotlib 中渲染具有 float 数据类型的矩阵似乎存在一些问题(按照惯例,图像中的 RGB 值始终是整数,因此我们可以'不要为此责怪 matplotlib。)
现在你有两个选择:
使用
np.uint8
数据类型创建 numpy 矩阵image = np.zeros((720, 1280, 3), dtype = np.uint8)
在 plt 上渲染之前,先将矩阵转换为整型。
image = np.astype(image, np.uint8)
还需要在最后添加plt.show()
。
关于python-3.x - plt.imshow() 没有正确显示 numpy 矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42324533/