实际上前面我们就已经用到了图像的绘制,如:

io.imshow(img)

这一行代码的实质是利用matplotlib包对图片进行绘制,绘制成功后,返回一个matplotlib类型的数据。因此,我们也可以这样写:

importmatplotlib.pyplot as plt

plt.imshow(img)

imshow()函数格式为:

matplotlib.pyplot.imshow(X, cmap=None)

X: 要绘制的图像或数组。

cmap: 颜色图谱(colormap), 默认绘制为RGB(A)颜色空间。

其它可选的颜色图谱如下列表:

颜色图谱描述

autumn

红-橙-黄

bone

黑-白,x线

cool

青-洋红

copper

黑-铜

flag

红-白-蓝-黑

gray

黑-白

hot

黑-红-黄-白

hsv

hsv颜色空间, 红-黄-绿-青-蓝-洋红-红

inferno

黑-红-黄

jet

蓝-青-黄-红

magma

黑-红-白

pink

黑-粉-白

plasma

绿-红-黄

prism

红-黄-绿-蓝-紫-...-绿模式

spring

洋红-黄

summer

绿-黄

viridis

蓝-绿-黄

winter

蓝-绿

用的比较多的有gray,jet等,如:

plt.imshow(image,plt.cm.gray)

plt.imshow(img,cmap=plt.cm.jet)

在窗口上绘制完图片后,返回一个AxesImage对象。要在窗口上显示这个对象,我们可以调用show()函数来进行显示,但进行练习的时候(ipython环境中),一般我们可以省略show()函数,也能自动显示出来。

from skimage importio,data

img=data.astronaut()

dst=io.imshow(img)print(type(dst))

io.show()

显示为:

可以看到,类型是'matplotlib.image.AxesImage'。显示一张图片,我们通常更愿意这样写:

importmatplotlib.pyplot as pltfrom skimage importio,data

img=data.astronaut()

plt.imshow(img)

plt.show()

matplotlib是一个专业绘图的库,相当于matlab中的plot,可以设置多个figure窗口,设置figure的标题,隐藏坐标尺,甚至可以使用subplot在一个figure中显示多张图片。一般我们可以这样导入matplotlib库:

import matplotlib.pyplot as plt

也就是说,我们绘图实际上用的是matplotlib包的pyplot模块。

一、用figure函数和subplot函数分别创建主窗口与子图

例:分开并同时显示宇航员图片的三个通道

from skimage importdataimportmatplotlib.pyplot as plt

img=data.astronaut()

plt.figure(num='astronaut',figsize=(8,8)) #创建一个名为astronaut的窗口,并设置大小

plt.subplot(2,2,1) #将窗口分为两行两列四个子图,则可显示四幅图片

plt.title('origin image') #第一幅图片标题

plt.imshow(img) #绘制第一幅图片

plt.subplot(2,2,2) #第二个子图

plt.title('R channel') #第二幅图片标题

plt.imshow(img[:,:,0],plt.cm.gray) #绘制第二幅图片,且为灰度图

plt.axis('off') #不显示坐标尺寸

plt.subplot(2,2,3) #第三个子图

plt.title('G channel') #第三幅图片标题

plt.imshow(img[:,:,1],plt.cm.gray) #绘制第三幅图片,且为灰度图

plt.axis('off') #不显示坐标尺寸

plt.subplot(2,2,4) #第四个子图

plt.title('B channel') #第四幅图片标题

plt.imshow(img[:,:,2],plt.cm.gray) #绘制第四幅图片,且为灰度图

plt.axis('off') #不显示坐标尺寸

plt.show()#显示窗口

在图片绘制过程中,我们用matplotlib.pyplot模块下的figure()函数来创建显示窗口,该函数的格式为:

matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None)

所有参数都是可选的,都有默认值,因此调用该函数时可以不带任何参数,其中:

num: 整型或字符型都可以。如果设置为整型,则该整型数字表示窗口的序号。如果设置为字符型,则该字符串表示窗口的名称。用该参数来命名窗口,如果两个窗口序号或名相同,则后一个窗口会覆盖前一个窗口。

figsize: 设置窗口大小。是一个tuple型的整数,如figsize=(8,8)

dpi: 整形数字,表示窗口的分辨率。

facecolor: 窗口的背景颜色。

edgecolor: 窗口的边框颜色。

用figure()函数创建的窗口,只能显示一幅图片,如果想要显示多幅图片,则需要将这个窗口再划分为几个子图,在每个子图中显示不同的图片。我们可以使用subplot()函数来划分子图,函数格式为:

matplotlib.pyplot.subplot(nrows, ncols, plot_number)

nrows: 子图的行数。

ncols: 子图的列数。

plot_number: 当前子图的编号。

如:

plt.subplot(2,2,1)

则表示将figure窗口划分成了2行2列共4个子图,当前为第1个子图。我们有时也可以用这种写法:

plt.subplot(221)

两种写法效果是一样的。每个子图的标题可用title()函数来设置,是否使用坐标尺可用axis()函数来设置,如:

plt.subplot(221)

plt.title("first subwindow")

plt.axis('off')

二、用subplots来创建显示窗口与划分子图

除了上面那种方法创建显示窗口和划分子图,还有另外一种编写方法也可以,如下例:

importmatplotlib.pyplot as pltfrom skimage importdata,color

img=data.immunohistochemistry()

hsv=color.rgb2hsv(img)

fig, axes= plt.subplots(2, 2, figsize=(7, 6))

ax0, ax1, ax2, ax3=axes.ravel()

ax0.imshow(img)

ax0.set_title("Original image")

ax1.imshow(hsv[:, :, 0], cmap=plt.cm.gray)

ax1.set_title("H")

ax2.imshow(hsv[:, :,1], cmap=plt.cm.gray)

ax2.set_title("S")

ax3.imshow(hsv[:, :,2], cmap=plt.cm.gray)

ax3.set_title("V")for ax inaxes.ravel():

ax.axis('off')

fig.tight_layout()#自动调整subplot间的参数

直接用subplots()函数来创建并划分窗口。注意,比前面的subplot()函数多了一个s,该函数格式为:

matplotlib.pyplot.subplots(nrows=1, ncols=1)

nrows: 所有子图行数,默认为1。

ncols: 所有子图列数,默认为1。

返回一个窗口figure, 和一个tuple型的ax对象,该对象包含所有的子图,可结合ravel()函数列出所有子图,如:

fig, axes = plt.subplots(2, 2, figsize=(7, 6))

ax0, ax1, ax2, ax3= axes.ravel()

创建了2行2列4个子图,分别取名为ax0,ax1,ax2和ax3, 每个子图的标题用set_title()函数来设置,如:

ax0.imshow(img)

ax0.set_title("Original image")

如果有多个子图,我们还可以使用tight_layout()函数来调整显示的布局,该函数格式为:

matplotlib.pyplot.tight_layout(pad=1.08, h_pad=None, w_pad=None, rect=None)

所有的参数都是可选的,调用该函数时可省略所有的参数。

pad: 主窗口边缘和子图边缘间的间距,默认为1.08

h_pad, w_pad: 子图边缘之间的间距,默认为 pad_inches

rect: 一个矩形区域,如果设置这个值,则将所有的子图调整到这个矩形区域内。

一般调用为:

plt.tight_layout() #自动调整subplot间的参数

三、其它方法绘图并显示

除了使用matplotlib库来绘制图片,skimage还有另一个子模块viewer,也提供一个函数来显示图片。不同的是,它利用Qt工具来创建一块画布,从而在画布上绘制图像。

例:

from skimage importdatafrom skimage.viewer importImageViewer

img=data.coins()

viewer=ImageViewer(img)

viewer.show()

最后总结一下,绘制和显示图片常用到的函数有:

函数名

功能

调用格式

figure

创建一个显示窗口

plt.figure(num=1,figsize=(8,8)

imshow

绘制图片

plt.imshow(image)

show

显示窗口

plt.show()

subplot

划分子图

plt.subplot(2,2,1)

title

设置子图标题(与subplot结合使用)

plt.title('origin image')

axis

是否显示坐标尺

plt.axis('off')

subplots

创建带有多个子图的窗口

fig,axes=plt.subplots(2,2,figsize=(8,8))

ravel

为每个子图设置变量

ax0,ax1,ax2,ax3=axes.ravel()

set_title

设置子图标题(与axes结合使用)

ax0.set_title('first window')

tight_layout

自动调整子图显示布局

plt.tight_layout()

python怎么制作图像_python数字图像处理(5):图像的绘制相关推荐

  1. python数字图像处理怎么保存图像_python数字图像处理(五) 图像的退化和复原...

    import cv2 import numpy as np import matplotlib.pyplot as plt import scipy import scipy.stats %matpl ...

  2. Python 计算机视觉(一) —— 数字图像处理基础

    目录 1. 数字图像处理 2. 图像三要素 (1) 图像大小(size) 像素点 分辨率 图像大小 (2) 图像深度(depth) (3) 图像通道数(channels) 单通道 三通道 四通道 二通 ...

  3. 数字图像处理之图像基础

    最近在学数字图像处理,图像基础包括以下部分: 导入库 import numpy as np import matplotlib.pyplot as plt import cv2 as cv 图片展示函 ...

  4. 数字图像处理:图像的频域

    数字图像处理:图像的频域 一.图像高频信号和低频信号的理解 1.1 图像中的低频信号和高频信号也叫做低频分量和高频分量. 1)空间频率指的是图像中灰度值相对它的邻居点变化方式.如果一副图像中灰度从一边 ...

  5. 数字图像处理:图像金字塔

    转载请标明出处:数字图像处理:图像金字塔_数字图像处理opencv_新浪博客 (一)概念 以多个分辨率来表示图像的一种有效且概念简单的结构是图像金字塔.图像金字塔最初用于机器视觉和图像压缩,一个图像金 ...

  6. 数字图像处理 - Ch2 图像取样与量化

    数字图像处理 Ch2 图像取样与量化 图像取样与量化 概念 数字图像表示 线性索引与坐标索引 空间分辨率 & 灰度分辨率 图像内插 1. 最近邻内插 2. 双线性内插 3. 双三次内插 其他方 ...

  7. 数字图像处理--基本图像操作

    数字图像处理–基本图像操作 1 主要内容 (1)搭建能运行图像算法程序的平台: (2)独立完成matlab矩阵基本操作,如矩阵信息的提取包括获取矩阵大小.矩阵维数.矩阵元素个数.向量长度和矩阵乘法等操 ...

  8. 数字图像处理:图像的灰度变换(Matlab实现)

    数字图像处理:图像的灰度变换(Matlab实现) (1)线性变换: 通过建立灰度映射来调整源图像的灰度. k>1增强图像的对比度:k=1调节图像亮度,通过改变d值达到调节亮度目的:0 i = i ...

  9. 【数字图像处理】图像直方图均衡化、空域滤波(均值滤波、中值滤波)、图像锐化(Laplace算子)、图像傅里叶变换实验

    图像直方图均衡化.空域滤波.图像锐化.图像傅里叶变换 一.图像直方图均衡化 二.图像空域滤波 1.均值滤波(滤波次数n→3) 2.中值滤波(滤波次数n→3) 3.图像锐化(Laplace算子) 三.图 ...

最新文章

  1. php mysql_query的的用法_PHP / MYSQL使用mysqli_query选择
  2. html5+开发window桌面图标,js模仿windows桌面图标排列算法具体实现(附图)
  3. leetcode209. 长度最小的子数组(暴力+滑动窗口)
  4. Mysql中代替like模糊查询的一种方法
  5. 高质高效软件开发组织能力模型
  6. Nuget 启用数据库迁移的时候一定要把包含DbContext的项目设为启动项目
  7. 【华为云技术分享】如何处理暗数据?
  8. jquery操作CSS样式全记录
  9. cacti升级后还是用的旧路径_Flutter1.9升级体验及填坑全攻略
  10. pspice仿真笔记——spice模型转化
  11. 电路实验---全桥整流电路
  12. java 重量单位换算_JAVA中数据存储方式以及单位转换
  13. 智能优化算法:白鲸优化算法-附代码
  14. Linux tar 命令 将归档内指定文件解压到指定目录
  15. WMI Provider Host(wmiprvse.exe)占用CPU高的解决方案
  16. python随机生成小写字母表_用小写字母生成大随机字符串的最快方法
  17. vue2 自定义card分页
  18. 前台替换用户名部分转换为*显示
  19. C语言:typedef用法简介
  20. 不坑盒子:强大的word插件,让工作更高效

热门文章

  1. spring 使用其他类protected方法_Java操作bean、属性、方法的使用工具类
  2. android笔试添加自定义服务,Android之Listview(item为单选题)自定义adapter,像考试时前面的10几道单选题的实现...
  3. Syntax Error: TypeError: this.getOptions is not a function
  4. FTP连接时出现“227 Entering Passive Mode”的解决方法
  5. 调整selinux状态为disabled
  6. linux Nas挂载
  7. 在新项目中使用 Vue3 使用总结
  8. 分区裁剪 oracle,[讨论]分区表并行和剪裁的困惑
  9. 利用函数wavread对语音信号进行采样_AI大语音(一)——语音识别基础(深度解析)...
  10. 9008线刷_小米红米手机新机9008模式怎么进入?小米线刷救砖模式