Python 可视化--Matplotlib 图像

本教程将使用matplotlib的命令式绘图接口pyplot。 该接口维护全局状态,并且可用于简单快速地尝试各种绘图设置。 另一种是面向对象的接口,这也非常强大,一般更适合大型应用程序的开发。 如果你想了解面向对象接口,使用上的常见问题是一个用于起步的不错的页面。

1. 将图像数据导入到 NumPy 数组

加载图像数据由 Pillow 库提供支持。 本来,matplotlib只支持 PNG 图像。 如果本机读取失败,下面显示的命令会回退到 Pillow。

此示例中使用的图像是 JPG 文件,但是请记住你自己的数据的 Pillow 要求。

下面是我们要摆弄的图片:

在这里插入图片描述

现在我们开始加载和打印图片信息:

import matplotlib.image as mpimg

img = mpimg.imread('images/mitaomao.jpg')
print(img)

输出:

[[[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 ...

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]

 [[255 255 255]
  [255 255 255]
  [255 255 255]
  ...
  [255 255 255]
  [255 255 255]
  [255 255 255]]]

2. 将 NumPy 数组绘制为图像

所以,你将数据保存在一个nump数组(通过导入它,或生成它)。 让我们渲染它吧。 在 Matplotlib 中,这是使用imshow()函数执行的。 这里我们将抓取plot对象。 这个对象提供了一个简单的方法来从提示符处理绘图。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('images/mitaomao.jpg')
imgplot = plt.imshow(img)
plt.show()

注意:更改你自己图片的放置路径。

在这里插入图片描述

你也可以绘制任何 NumPy 数组。

3. 颜色刻度参考

了解颜色代表什么值对我们很有帮助。 我们可以通过添加颜色条来做到这一点。

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

img = mpimg.imread('images/mitaomao.jpg')
imgplot = plt.imshow(img)
plt.colorbar()
plt.show()

在这里插入图片描述

4. 数组插值方案

插值根据不同的数学方案计算像素『应有』的颜色或值。 发生这种情况的一个常见的场景是调整图像的大小。 像素的数量会发生变化,但你想要相同的信息。 由于像素是离散的,因此存在缺失的空间。 插值就是填补这个空间的方式。 这就是当你放大图像时,你的图像有时会出来看起来像素化的原因。 当原始图像和扩展图像之间的差异较大时,效果更加明显。 让我们加载我们的图像并缩小它。 我们实际上正在丢弃像素,只保留少数几个像素。 现在,当我们绘制它时,数据被放大为你屏幕的大小。 由于旧的像素不再存在,计算机必须绘制像素来填充那个空间。

我们将使用用来加载图像的 Pillow 库来调整图像大小。

import matplotlib.pyplot as plt
from PIL import Image

img = Image.open('images/mitaomao.jpg')
img.thumbnail((64, 64), Image.ANTIALIAS)  # resizes image in-place
imgplot = plt.imshow(img)
plt.show()

在这里插入图片描述

这里我们使用默认插值,双线性,因为我们没有向imshow()提供任何插值参数。

让我们试试一些其它的东西:

imgplot = plt.imshow(img, interpolation="bicubic")

在这里插入图片描述

双立方插值通常用于放大照片 - 人们倾向于模糊而不是过度像素化。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值