您的位置:首页 > 编程语言 > Python开发

win10+Python3.7.3+OpenCV3.4.1入门学习(十三 直方图处理)————13.7 pyplot模块介绍

2020-01-12 11:02 531 查看

Python版本是Python3.7.3,OpenCV版本OpenCV3.4.1,开发环境为PyCharm

13.7 pyplot模块介绍

matplotlib.pyplot模块提供了一个类似于MATLAB绘图方式的框架,可以使用其中的函数方便地绘制图形。

13.7.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)。

eg1:编写程序演示函数subplot()的使用。
代码如下:

import cv2
import matplotlib.pyplot as plt
img = cv2.imread('image\\equ.bmp',cv2.IMREAD_GRAYSCALE)
equ = cv2.equalizeHist(img)
plt.figure("subplot示例")
plt.subplot(121),plt.hist(img.ravel(),256)
plt.subplot(122),plt.hist(equ.ravel(),256)
plt.show(  )   # 显示图像

运行上述程序,会显示如下图所示的图像。

13.7.2 imshow函数

模块matplotlib.pyplot提供了函数matplotlib.pyplot.imshow()用来显示图像。其语法格式为:

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

式中:
● X为图像信息,可以是各种形式的数值。
● cmap表示色彩空间。该值是可选项,默认值为null,默认使用RGB(A)色彩空间。

eg2:使用函数matplotlib.pyplot.imshow()显示彩色图像。
根据题目的要求,编写代码如下:

import cv2
import matplotlib.pyplot as plt
img = cv2.imread('image\\girl.bmp')
imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.figure("显示结果")
plt.subplot(121)
plt.imshow(img)
plt.axis('off') #关闭坐标轴的显示
plt.subplot(122)
plt.imshow(imgRGB),plt.axis('off')
plt.show(  )   # 显示图像

运行上述程序,会显示如下图所示的图像。

在图中,左图是直接使用默认色彩空间参数模式显示的彩色图像的结果,图像没有正常显示出来。这是因为通过函数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()的默认色彩空间模式显示的彩色图像,可以看到图像显示正常。

eg3:使用函数matplotlib.pyplot.imshow()显示灰度图像。
本例中,我们尝试使用不同的形式显示灰度图像,观察图像是否能够正常显示。
代码如下:

import cv2
import matplotlib.pyplot as plt
o = cv2.imread('image\\girl.bmp')
g=cv2.cvtColor(o, cv2.COLOR_BGR2GRAY)
plt.figure("灰度图像显示演示")
plt.subplot(221)
plt.imshow(o),plt.axis('off')
plt.subplot(222)
plt.imshow(o,cmap=plt.cm.gray),plt.axis('off')
plt.subplot(223)
plt.imshow(g),plt.axis('off')
plt.subplot(224)
plt.imshow(g,cmap=plt.cm.gray),plt.axis('off')
plt.show(  )   # 显示图像

运行上述程序,会显示如下图所示的图像。可以看到,本例中所采用了几种针对灰度图像的显示方式,只有使用灰度图像作为参数,并且将色彩空间参数值设置为“cmap=plt.cm.gray”,灰度图像才被正常显示

本例以不同的形式展示了使用函数matplotlib.pyplot.imshow()显示灰度图像的效果。
● 左上角是原始图像。因为没有对读取的图像进行通道转换,直接将其作为彩色图像显示,所以显示结果中通道顺序是错乱的,图像没有正常显示。
● 右上角是我们尝试将彩色图像作为原始图像,将其色彩空间参数设置为“cmap=plt.cm.gray”,让彩色图像以灰度图像展示的结果,图像显示失败。
● 左下角是使用默认色彩空间参数,显示灰度图像的结果。这种情况下,灰度图像会采用默认的RGB模式显示。可以看到,图像没有正常显示。
● 右下角是将灰度图像作为原始图像,并将其色彩空间参数设置为“cmap=plt.cm.gray”而显示的灰度图像,图像显示正常。

eg4:使用函数matplotlib.pyplot.imshow()以不同的参数形式显示灰度图像。
代码如下:

import cv2
import matplotlib.pyplot as plt
o = cv2.imread('image\\8.bmp')
g=cv2.cvtColor(o, cv2.COLOR_BGR2GRAY)
plt.figure("灰度图像显示演示")
plt.subplot(221); plt.imshow(g, cmap=plt.cm.gray)
plt.subplot(222); plt.imshow(g, cmap=plt.cm.gray_r)
plt.subplot(223); plt.imshow(g, cmap='gray')
plt.subplot(224); plt.imshow(g, cmap='gray_r')
plt.show(  )   # 显示图像

上述代码中,色彩空间参数cmap的参数值“plt.cm.gray_r”及“gray_r”中的“r”是英文“reverse”的缩写,表示逆转的意思。
运行上述程序,会显示如下图所示的图像。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
菩提树下祈愿少年 发布了116 篇原创文章 · 获赞 23 · 访问量 2017 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: