转载:https://blog.csdn.net/haoji007/article/details/52063168

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

io.imshow(img)

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

import matplotlib.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 import io,data
img=data.astronaut()
dst=io.imshow(img)
print(type(dst))
io.show()

显示为:

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

import matplotlib.pyplot as plt
from skimage import io,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 import data
import matplotlib.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来创建显示窗口与划分子图

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

import matplotlib.pyplot as plt
from skimage import data,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 in axes.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 import data
from skimage.viewer import ImageViewer 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图像的绘制的更多相关文章

  1. 小白艰难的Python图像的绘制

    1.贪吃蛇 代码: import turtle turtle.setup(650,350) turtle.penup() turtle.fd(-250) turtle.pendown() turtle ...

  2. python数字图像处理(5):图像的绘制

    实际上前面我们就已经用到了图像的绘制,如: io.imshow(img) 这一行代码的实质是利用matplotlib包对图片进行绘制,绘制成功后,返回一个matplotlib类型的数据.因此,我们也可 ...

  3. python matplotlib.pyplot对图像进行绘制

    imshow()是对图像进行绘制 imshow()函数格式为: matplotlib.pyplot.imshow(X, cmap=None) X: 要绘制的图像或数组. cmap: 颜色图谱(colo ...

  4. OpenCV之响应鼠标(四):在图像上绘制出矩形并标出起点的坐标

    涉及到两方面的内容:1. 用鼠标画出矩形.2.在图像上绘制出点的坐标 用鼠标绘制矩形,涉及到鼠标的操作,opencv中有鼠标事件的介绍.需要用到两个函数:回调函数CvMouseCallback和注册回 ...

  5. Python使用plotly绘制数据图表的方法

    转载:http://www.jb51.net/article/118936.htm 本篇文章主要介绍了Python使用plotly绘制数据图表的方法,实例分析了plotly绘制的技巧. 导语:使用 p ...

  6. Python入门-散点图绘制

    Python入门-散点图绘制  废话不说 直接上代码 import matplotlib.pyplot as plt x_values = list(range(1,1001)) y_values = ...

  7. Python——使用matplotlib绘制柱状图

    Python——使用matplotlib绘制柱状图 1.基本柱状图           首先要安装matplotlib(http://matplotlib.org/api/pyplot_api.htm ...

  8. 【Tool】Augmentor和imgaug——python图像数据增强库

    Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...

  9. 借助Photoshop,Illustrator等设计软件进行WPF图形图像的绘制

    原文:借助Photoshop,Illustrator等设计软件进行WPF图形图像的绘制 本文所示例子是借助第三方设计软件,制作复杂的矢量图形,转成与XAML酷似的SVG,再转换成xaml而实现的. 这 ...

随机推荐

  1. 高可用集群corosync+pacemaker之crmsh使用(一)

    上一篇博客我们聊了下高可用集群corosync+pacemaker的相关概念以及corosync的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13585 ...

  2. 记录Unity的优化tip(不断更新)

    大概记录遇到的可以优化的点.1.Mesh.UploadMeshData:预先把网格送到GPU unity是这样的,它对一个网格,先把它搞到内存,然后在第一次渲染它时把它送到GPU.但送GPU经常是个瓶 ...

  3. python3学习笔记回忆录01

    1.print(),print在python3中是一个函数,默认输出内容会自动换行,如果不换行需要加参数end=‘’ print ('hello,',end=' ’) print ('world!') ...

  4. django学习(二)

    1.反向解析 什么是方向解析呢? 通过一些方法得到一个结果,该结果可以直接访问对应url出发视图函数. 先给一个路由和视图函数起一个别名.但是我们要注意的是反向解析的别名是不可以冲突的!!!不然会出现 ...

  5. [BUUOJ记录] [强网杯 2019]随便注(三种方法)

    本题主要考察堆叠注入,算是比较经典的一道题,在i春秋GYCTF中也出现了本题的升级版 猜测这里的MySQL语句结构应该是: select * from words where id='$inject' ...

  6. 10_Python的函数function

    1.函数的概述 1.函数是可以重复执行的语句块且可以重复调用,函数封装了可重复执行的语句提高了语句的可重复性     2.函数的参数和返回值的作用流程图: https://www.processon. ...

  7. Java Web制作登录 验证码

    具体操作如下: 新建一个servlet,代码如下:标记一个WebServlet, @WebServlet(urlPatterns = {"/checkCode"}) //验证码Se ...

  8. Linux rndis_host 驱动的一个BUG与解决方案

    关键字 rndis_host, linux, kernel, modem 综述 rndis 是微软定义的一套通讯方案.类似的协议还有 qmi/mbim/ecm/ncm. rndis 协议足够简单,可靠 ...

  9. 1. QCamera2基础组件——cam_semaphore

    /* Copyright (c) 2012, The Linux Foundation. All rights reserved. * * Redistribution and use in sour ...

  10. 最优得分 score

    Solution: 一道很典型的dp题目, 对于 20% 的数据(Bi=0),直接使用01背包即可. 对于 100% 的数据,我们需要进行分析,当我们对 …a,b… 和 …b,a… (…表示的是相同的 ...