【基础】pyplot模块
matplotlib.pyplot模块提供了一个类似于MATLAB绘图方式的框架,可以使用其中的函数方便地绘制图形。
1. subplot函数
模块matplotlib.pyplot提供了函数matplotlib.pyplot.subplot()用来向当前窗口内添加一个子窗口对象。该函数的语法格式为:
matplotlib.pyplot.subplot(nrows, ncols, index)
● nrows为行数。
● ncols为列数。
● index为窗口序号。
例如,subplot(2, 3, 4)表示在当前的两行三列的窗口的第4个位置上,添加1个子窗口,如下图所示

需要注意的是,窗口是按照行方向排序的,而且序号是从“1”开始而不是从“0”开始的。如果所有参数都小于10,可以省略彼此之间的逗号,直接写三个数字。例如,上述subplot(2, 3, 4)可以直接表示为subplot(234)。
程序演示 编写程序演示函数subplot()的使用
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
equ = cv2.equalizeHist(img)
plt.figure('subplot demo')
plt.subplot(121), plt.hist(img.ravel(), 256)
plt.subplot(122), plt.hist(equ.ravel(), 256)
plt.show()
运行上述程序,会显示如下图所示的图像:
2. imshow函数
模块matplotlib.pyplot提供了函数matplotlib.pyplot.imshow()用来显示图像。其语法格式为:
matplotlib.pyplot.imshow(X, cmap=None)
● X为图像信息,可以是各种形式的数值。
● cmap表示色彩空间。该值是可选项,默认值为null,默认使用RGB(A)色彩空间。
程序演示:使用函数matplotlib.pyplot.imshow()显示彩色图像。
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
imgRGB = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.figure('result')
plt.subplot(121), plt.imshow(img), plt.axis('off')
plt.subplot(122), plt.imshow(imgRGB), plt.axis('off')
plt.show()
式中,语句“plt.axis('off')”表示关闭坐标轴的显示。运行上述程序,会显示如下图所示的图像。

在上图,左图是直接使用默认色彩空间参数模式显示的彩色图像的结果,图像没有正常显示出来。这是因为通过函数cv2.imread()读取的图像,其通道顺序是BGR模式的。而函数matplotlib.pyplot.imshow()的显示顺序是RGB模式的,所以显示出来的图像通道顺序是错乱的,因而无法正常显示。
如果想使用函数matplotlib.pyplot.imshow()正常地显示函数cv2.imread()读取的图像,需要对读取的图像进行通道顺序转换。上图中的右图是使用语句imgRGB=cv2.cvtColor (img,cv2.COLOR_BGR2RGB)将函数cv2.imread()读取到的图像img从BGR转换为RGB模式后,再使用函数matplotlib.pyplot.imshow()的默认色彩空间模式显示的彩色图像,可以看到图像显示正常。