我在使用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之间的值。
答案 0 :(得分:4)
默认情况下,使用np.zeros()
或np.ones()
创建numpy数组时,矩阵的默认数据类型设置为float,或更精确地np.float64
,并且似乎matplotlib中的一些问题是渲染具有浮点数据类型的矩阵(按照惯例,图像中的RGB值总是不变的,所以我们不能责怪matplotlib。)
现在您有两个选择:
使用np.uint8
数据类型
image = np.zeros((720, 1280, 3), dtype = np.uint8)
在plt上渲染矩阵之前,将矩阵转换为整数类型。
image = np.astype(image, np.uint8)
此外,您还需要在最后添加plt.show()
。