本文主要讲述利用matplotlib包进行多图像的绘制。
1.首先看第一个函数matplotlib.pyplot.subplot,这个函数是为了在一张图里放置多个子图。
代码语言:javascript复制subplot(nrows, ncols, index, **kwargs)
- 第一个参数为子图行的数目
- 第二个参数为子图列的数目
- 第三个参数为某一幅图的编号1,2,3,4,······
例如subplot(2,2,1)为创建一个两行两列的图,其中这幅子图为第一号子图。
2. 显示图片的函数matplotlib.pyplot.subplot()
代码语言:javascript复制matplotlib.pyplot.imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, hold=None, data=None, **kwargs)
- 要绘制的图像或者数组
- cmap颜色图谱(colormap),默认None,默认为RGB颜色空间。常用的有gray,jet等
相关参考:matplotlib.pyplot.imshow,
3. matplotlib.pyplot.title() 显示对应子图的名字
4. matplotlib.pyplot.xticks(),matplotlib.pyplot.yticks()
获取或设置x,y轴的当前刻度位置和标签。
5. 举个例子
代码语言:javascript复制import numpy as np
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('bmx1.jpg',0)#第二个参数 为将图片直接读为灰度图 或者加一步BGR到灰度图的转变,后面的一系列检测是基于灰度图
#cv2.CV_64F 输出图像的深度(数据类型),可以使用 -1, 与原图像保持一致 np.uint8
laplacian=cv2.Laplacian(img,cv2.CV_64F)
# 参数 1,0 为只在 x 方向求一阶导数,最大可以求 2 阶导数。
sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
# 参数 0,1 为只在 y 方向求一阶导数,最大可以求 2 阶导数。
sobely=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely,cmap = 'gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])
plt.show()
运行结果如下: