返回介绍

01. Python 工具

02. Python 基础

03. Numpy

04. Scipy

05. Python 进阶

06. Matplotlib

07. 使用其他语言进行扩展

08. 面向对象编程

09. Theano 基础

10. 有趣的第三方模块

11. 有用的工具

12. Pandas

图像基础

发布于 2022-09-03 20:46:14 字数 5619 浏览 0 评论 0 收藏 0

导入相应的包:

In [1]:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
%matplotlib inline

臭虫

导入图像

我们首先导入上面的图像,注意 matplotlib 默认只支持 PNG 格式的图像,我们可以使用 mpimg.imread 方法读入这幅图像:

In [2]:

img = mpimg.imread('https://www.wenjiangs.com/wp-content/uploads/2022/09/stinkbug.png')

In [3]:

img.shape

Out[3]:

(375L, 500L, 3L)

这是一个 375 x 500 x 3RGB 图像,并且每个像素使用 uint8 分别表示 RGB 三个通道的值。不过在处理的时候,matplotlib 将它们的值归一化到 0.0~1.0 之间:

In [4]:

img.dtype

Out[4]:

dtype('float32')

显示图像

使用 plt.imshow() 可以显示图像:

In [5]:

imgplot = plt.imshow(img)

https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/Xjva2sGimQRmYusf-F4U7Hv.png alt="">

伪彩色图像

从单通道模拟彩色图像:

In [6]:

lum_img = img[:,:,0]
imgplot = plt.imshow(lum_img)

https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/MeJtFIx86u2sp4oY-OOictf.png alt="">

改变 colormap

In [7]:

imgplot = plt.imshow(lum_img)
imgplot.set_cmap('hot')

https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/iKPePflJcqiLNN3N-G0pG4H.png alt="">

In [8]:

imgplot = plt.imshow(lum_img)
imgplot.set_cmap('spectral')

https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/PofrE5FpcHe8fFwM-LeB0Bz.png alt="">

显示色度条:

In [9]:

imgplot = plt.imshow(lum_img)
imgplot.set_cmap('spectral')
plt.colorbar()
plt.show()

https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/MM7IpK2lQmgpmXuz-fRTuqO.png alt="">

限制显示范围

先查看直方图:

In [10]:

plt.hist(lum_img.flatten(), 256, range=(0.0,1.0), fc='k', ec='k')
plt.show()

https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/EnPu1QQc5GsU9akE-1S9XNy.png alt="">

将显示范围设为 0.0-0.7

In [11]:

imgplot = plt.imshow(lum_img)
imgplot.set_clim(0.0,0.7)

https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/ywoVT5bw6voMHZrs-OBQOCd.png alt="">

resize 操作

In [12]:

from PIL import Image
img = Image.open('https://www.wenjiangs.com/wp-content/uploads/2022/09/stinkbug.png')
rsize = img.resize((img.size[0]/10,img.size[1]/10))
rsizeArr = np.asarray(rsize) 
imgplot = plt.imshow(rsizeArr)

https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/X5iYt8GY9L8NjGOm-up1QhK.png alt="">

上面我们将这个图像使用 PIL 的 Image 对象导入,并将其 resize 为原来的 1/100,可以看到很多细节都丢失了。

在画图时,由于画面的大小与实际像素的大小可能不一致,所以不一致的地方会进行插值处理,尝试一下不同的插值方法:

In [13]:

imgplot = plt.imshow(rsizeArr)
imgplot.set_interpolation('nearest')

https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/Jk5W90jzCSK1YdxO-NoX0DM.png alt="">

In [14]:

imgplot = plt.imshow(rsizeArr)
imgplot.set_interpolation('bicubic')

https://www.wenjiangs.com/wp-content/uploads/2022/docimg20/wqkGH31RDpUkxt0j-Mg18I7.png alt="">

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文