《数字图像处理-OpenCV/Python》连载(6)基于Matplotlib显示图像
本书京东优惠购书链接:https://item.jd.com/14098452.html
本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html
第1章 图像的基本操作
为了方便初学者从零开始学习OpenCV-Python,本书从图像的读取、保存和显示等基本操作开始介绍,使读者可以循序渐进地使用和理解本书的每一个例程。
1.3 基于Matplotlib显示图像
OpenCV所提供的函数cv.imshow的显示功能比较简单,如果需要实现更丰富的图像显示和控制功能,通常可以使用Matplotlib。
Matplotlib是最常用的Python绘图库之一,功能非常强大。它能提供简单、完整的应用程序接口(API)和多样化的输出格式,可以绘制各种静态、动态和交互式图表,也可以作为控件嵌入图形用户界面(GUI)应用程序中。
Matplotlib中的函数cv.imshow能将数组的值以图片形式显示,可以显示OpenCV中的图像。函数cv.imshow的控制参数很多,本书只介绍图像显示中最常用的内容。
函数原型
matplotlib.pyplot.imshow(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, hold, data, **kwargs)
函数cv.imshow用于在指定窗口中显示OpenCV图像,默认将图像的像素值映射到[0,255] 显示。函数cv.waitKey用于等待按键事件或延迟(毫秒),以保持窗口显示。
参数说明
- X:显示图像,支持Numpy数组或PIL图像。
- cmap:颜色图谱的设置参数,默认为RGB(A)颜色空间。
- gray:设置为显示灰度图像。
- vmin,vmax:定义颜色映射覆盖的数据范围,是可选项,默认为图像X的数据范围。
注意问题
(1)在导入Matplotlib时通常将pyplot模块简写为plt,在程序中将函数cv.imshow简写为plt.imshow。
(2)OpenCV和Matplotlib中的彩色图像都是多维Numpy数组,但OpenCV使用的是BGR格式,颜色分量按B/G/R顺序排列;而Matplotlib使用的是RGB格式,颜色分量按R/G/B顺序排列。用plt.imshow()显示OpenCV彩色图像,要将BGR格式转换为RGB格式。
# 图片格式转换:BGR(OpenCV) -> RGB(Matplotlib/PyQt5)
imgRGB = cv.cvtColor(imgBGR, cv.COLOR_BGR2RGB)
(3)灰度图像不涉及颜色分量,不需要格式转换,但需要设置显示参数cmap=‘gray’。
(4)函数plt.imshow后必须带有函数plt.show,才能在指定窗口中显示图像。
(5)函数plt.imshow可以应用Matplotlib的各种控制方法,如标题、坐标轴和插值等,本书将结合例程来进行讲解。更多特殊方法和设置详见Matplotlib说明文档(链接1-2)。
【例程0105】使用Matplotlib显示图像
本例程使用Matplotlib显示彩色和灰度图像,运行结果如图1-2所示。
# 【0105】使用 Matplotlib 显示图像
import cv2 as cv
from matplotlib import pyplot as plt
if __name__ == '__main__':
filepath = "../images/Lena.tif" # 读取文件的路径
img = cv.imread(filepath, flags=1) # flags=1 读取彩色图像(BGR)
imgRGB = cv.cvtColor(img, cv.COLOR_BGR2RGB) # 图片格式转换:BGR-> RGB
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY) # 图片格式转换:BGR -> Gray
plt.figure(figsize=(8, 7)) # 创建自定义图像
plt.subplot(221), plt.title("1. RGB (Matplotlib)"), plt.axis('off')
plt.imshow(imgRGB) # 用Matplotlib 显示彩色图像(RGB格式)
plt.subplot(222), plt.title("2. BGR (OpenCV)"), plt.axis('off')
plt.imshow(img) # 用Matplotlib 显示彩色图像(BGR格式)
plt.subplot(223), plt.title("3. cmap='gray'"), plt.axis('off')
plt.imshow(gray, cmap='gray') # 用Matplotlib 显示灰度图像,设置 gray 参数
plt.subplot(224), plt.title("4. without cmap"), plt.axis('off')
plt.imshow(gray) # 用Matplotlib 显示灰度图像,未设置 gray 参数
plt.tight_layout() # 自动调整子图间隔
plt.show() # 显示图像
图1-2 使用Matplotlib显示彩色和灰度图像
程序说明
(1)用Matplotlib显示OpenCV彩色图像时,要将BGR格式转换为RGB格式。图1-2(1)所示的格式已转换为RGB格式,图像的颜色显示正常;图1-2(2)所示为未做格式转换,直接显示了OpenCV的BGR格式图像,图像的颜色显示错误。
(2)当显示灰度图像时,要设置显示参数cmap=‘gray’。图1-2(3)所示为设置显示参数后的正确结果;图1-2(4)所示为没有设置显示参数,灰度图像的颜色显示错误。
本书京东优惠购书链接:https://item.jd.com/14098452.html
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/132688430)
Copyright 2023 youcans, XUPT
Crated:2023-09-09
欢迎关注本书CSDN独家连载专栏
《数字图像处理-OpenCV/Python》连载: https://blog.csdn.net/youcans/category_12418787.html
文章评论