python-3.x - plt.imshow() 没有正确显示 numpy 矩阵

标签 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 图像可以像 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/

相关文章:

Opencv Feature Matching 不能正确匹配不同尺寸的裁剪图像和从各种来源获取的图像?

sql-server - Python 3 和 pypyodbc 存储过程错误

string - 将 System::String^ 转换为 cv::String

python - 非成员运算符重载(特别是运算符==)在 Cython 中是否被破坏?

python-3.x - 如何在opencv python3中读取boto3文件对象

python - 具有视觉上不同的 "NA"正方形字段的 Matplotlib 灰度热图

python - 如何反转 fill_ Between

python - 绘制 DataFrame 字典

python - 将 CSV 中的字符串交换为日期时间 (Python)

python-3.x - python3 sqlalchemy pymysql 连接字符串