《数字图像处理-OpenCV/Python》连载(6)基于Matplotlib显示图像

news/2024/7/21 5:28:02 标签: opencv, python, 图像处理, 计算机视觉

《数字图像处理-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格式。

python"># 图片格式转换: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所示。

python"># 【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


http://www.niftyadmin.cn/n/5020922.html

相关文章

浅谈GB51309实施后对于消防应急照明和疏散指示系统在城市隧道应用中的影响

【摘要】:应急照明和疏散指示系统被广泛运用于城市隧道、楼宇建筑、地下管廊等各个方面。当隧道这类特殊建筑内出现火灾或事故时,可靠的应急照明和疏散指示系统对于人员的安全逃生有着重要的作用。随着GB51309-2018《消防应急照明和疏散指示系统技术标准…

地图分幅与图号计算01:根据图号解算图幅的经纬度四至范围

目录 1 基础背景知识介绍 1.1 信息概览 1.2 已知图号计算西南点经纬度 2 编程实现 推荐阅读国家标准:

群晖NAS教程(二十五)、利用web station安装nextcloud

群晖NAS教程(二十五)、利用web station安装nextcloud 一、下载离线安装包文件 下载地址https://download.nextcloud.com/server/releases/,我们选择zip格式的,下载这个latest-27.zip的最新版的。 把它加压缩到群辉web/hepnextcloud路径下,并…

数据库保存之Java字符串的压缩与解压缩

应用场景 当字符串太长, 需要将字符串值存入数据库时,如果字段长度不够,则会出现插入失败; 或者需要进行Http传输时,由于参数长度过长造成http传输失败等。 字符串压缩与解压方法 方法一:用 Java8中的gzip

【Image captioning】 Collaborative Transformer for Image Captioning实现流程

Dual-Level Collaborative Transformer for Image Captioning实现流程(原始代码的readme) 作者:安静到无声 个人主页 目录 Dual-Level Collaborative Transformer for Image Captioning实现流程(原始代码的readme)实验设置数据准备训练评价参考致谢推荐专栏论文地址:https:/…

Leetcode 9.11每日一题 630. 课程表 III

这里有 n 门不同的在线课程,按从 1 到 n 编号。给你一个数组 courses ,其中 courses[i] [durationi, lastDayi] 表示第 i 门课将会 持续 上 durationi 天课,并且必须在不晚于 lastDayi 的时候完成。 你的学期从第 1 天开始。且不能同时修读…

Mysql binlog的三种模式statement,row,mixed详解,以及无主键造成复制延时的测试

2.1 Statement 模式的概念 Statement 是基于语句的复制模式。 Statement 模式将数据库中执行的修改操作记录为 SQL 语句,再从数据库上执行相同的 SQL 语句来实现数据同步。 2.2 Statement 模式的优点 Statement 模式的优点是简单明了,易于理解和实现。…

LVS -DR

一、DR模式数据包流向分析 1.Client 客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源IP是 CIP,目的IP 是VIP)到达内核空间。 2.Director Server(负载均衡器)和 R…