python图像处理——图像绘制

来源:互联网 发布:tencent qq for linux 编辑:程序博客网 时间:2024/06/07 00:29

前面我们已经用到啦图像绘制,
io.imshow(img)
这行代码实质是利用matplot包对图片进行绘制,绘制成功后,返回一个matplotlib类型数据。
imshow()格式为
matplotlib.pyplot.imshow(X, cmap=None)
X:要绘制的图像或者数组
cmap:颜色图谱,默认绘制为RGB颜色空间
其他颜色图谱:
颜色图谱 描述
autumn 红-橙-黄
bone 黑-白,x线
cool 青-洋红
copper 黑-铜
flag 红-白-蓝-黑
gray 黑-白
hot 黑-红-黄-白
hsv hsv颜色空间, 红-黄-绿-青-蓝-洋红-红
inferno 黑-红-黄
jet 蓝-青-黄-红
magma 黑-红-白
pink 黑-粉-白
plasma 绿-红-黄
prism 红-黄-绿-蓝-紫-…-绿模式
spring 洋红-黄
summer 绿-黄
viridis 蓝-绿-黄
winter 蓝-绿

在窗口上绘制完图片后,返回一个AxesImage对象。要在窗口上显示这个对象,我们可以调用show()函数来进行显示,但进行练习的时候(ipython环境中),一般我们可以省略show()函数,也能自动显示出来。
from skimage import io,dataimg=data.astronaut()dst=io.imshow(img)print(type(dst))io.show()
matplotlib是一个专业绘图的库,相当于matlab中的plot,可以设置多个figure窗口,设置figure的标题,隐藏坐标尺,甚至可以使用subplot在一个figure中显示多张图片。一般我们可以这样导入matplotlib库:
import matplotlib.pyplot as plt

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

from skimage import dataimport matplotlib.pyplot as pltimg=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: 当前子图的编号。

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

import matplotlib.pyplot as pltfrom skimage import data,colorimg = 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))zx0,zx1,zx2,zx3 =axes.ravel()

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

ax0.imshow(img)ax0.set_title("Ori")

如果有多个子图,我们还可以使用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间参数
原创粉丝点击