• 【Python】Matplotlib-多张图像的显示


    一,情景描述

    大家在写论文或者实验报告的时候,经常会放多张图片或数据图像在一起形成对比。比如,我现在有一张经过椒盐噪声处理的图像,现在进行三种滤波,分别是均值,高斯,中值滤波,共计四张图像,怎么才能将他们利用matplotlib库放置到一起呢?跟着我一起来写代码吧!

    二,实现原理

    1.读取图像

    用cv2.imread()函数读取原始图像,图像文件放置在了项目文件夹下,图像需要时opencv支持的图像格式(如jpg,png等等)具体见链接:《OpenCV支持的图片格式》_opencv保存windows可以打开的类型-CSDN博客

    1. # encoding:utf-8
    2. import cv2
    3. import matplotlib.pyplot as plt
    4. plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
    5. plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
    6. img_1 = cv2.imread('sp_noise.jpg')
    7. img_2 = cv2.imread('medianBlur.jpg')
    8. img_3 = cv2.imread('mean.jpg')
    9. img_4 = cv2.imread('Gaussian.jpg')

    2.将BGR转化为RGB

    将图像色彩显示转化为RGB通道,否则后续利用matplotlib显示图像的时候会发生色彩通道不兼容导致色彩出现偏差。具体原因见我写的博客:【Bug】当用opencv库的imread()函数读取图像,用matplotlib库的plt.imshow()函数显示图像时,图像色彩出现偏差问题的解决方法-CSDN博客

    1. # 将BGR图像转换为RGB
    2. img_1 = cv2.cvtColor(img_1, cv2.COLOR_BGR2RGB)
    3. img_2 = cv2.cvtColor(img_2, cv2.COLOR_BGR2RGB)
    4. img_3 = cv2.cvtColor(img_3, cv2.COLOR_BGR2RGB)
    5. img_4 = cv2.cvtColor(img_4, cv2.COLOR_BGR2RGB)

    3.显示图像

    1. # 显示图形
    2. titles = ['噪声图像', '中值滤波', '均值滤波 ', '高斯滤波'] # 设置每个图像的标题
    3. images = [img_1, img_2, img_3, img_4] #将图像存储到images列表里面

     将每个图像标题和图像分别储存到titles和images列表里,方便后续取用,图像标题与图像一一对应,有多少图像存入列表多少。 

    1. for i in range(4):
    2. plt.subplot(2, 2, i + 1)
    3. plt.imshow(images[i])
    4. plt.title(titles[i])
    5. plt.xticks(), plt.yticks()
    6. plt.show()

    for i in range(4):启动一个循环,循环四次,有多少个图像循环多少次,每次循环代表对一个图像的处理。

    plt.subplot(2, 2, i + 1):在Matplotlib中创建一个2x2的子图网格i 的值在每次循环中分别为0,1,2,3,则i + 1 表示子图的位置,即1,2,3,4,下图是2x2的子图网格。

    如果是plt.subplot(1, 4, i + 1),则创建是1x4的子图网格,即一行四列。如图:

    plt.imshow(images[i])然后使用 plt.imshow 显示列表中的图像,当第一次循环时,i=0,即取出images[0],即第一张图,放到i+1=1的位置。

    plt.title(titles[i])设置当前子图的标题,根据 titles 中的标题列表选择相应的标题。

    plt.xticks([]), plt.yticks([])隐藏坐标轴,这将使图像更干净,不显示坐标刻,如果去掉参数[],即显示坐标轴:

    三,完整代码

    1. # encoding:utf-8
    2. import cv2
    3. import matplotlib.pyplot as plt
    4. plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
    5. plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
    6. img_1 = cv2.imread('sp_noise.jpg')
    7. img_2 = cv2.imread('medianBlur.jpg')
    8. img_3 = cv2.imread('mean.jpg')
    9. img_4 = cv2.imread('Gaussian.jpg')
    10. # 将BGR图像转换为RGB
    11. img_1 = cv2.cvtColor(img_1, cv2.COLOR_BGR2RGB)
    12. img_2 = cv2.cvtColor(img_2, cv2.COLOR_BGR2RGB)
    13. img_3 = cv2.cvtColor(img_3, cv2.COLOR_BGR2RGB)
    14. img_4 = cv2.cvtColor(img_4, cv2.COLOR_BGR2RGB)
    15. # 显示图形
    16. titles = ['噪声图像', '中值滤波', '均值滤波 ', '高斯滤波']
    17. images = [img_1, img_2, img_3, img_4]
    18. for i in range(4):
    19. plt.subplot(2, 2, i + 1)
    20. plt.imshow(images[i])
    21. plt.title(titles[i])
    22. plt.xticks([]), plt.yticks([])
    23. plt.show()

    实现效果:

    今日一笑:

     《天津中德应用技术大学助学金之原来我才是贫困生》

  • 相关阅读:
    【Linux】05.部署Microsoft SQL Server
    STM32踩坑:LAN8720未接网线,上电后再接网线,网络模块无法正常使用
    Linux基础-常见问题 xrandr屏幕操作命令详解
    Android Camera2 SessionConfiguration介绍和使用
    使用docker获取docker hub中的项目并复现
    Linux系统安全及应用(1)
    学习网络编程No.6【将服务器日志和守护进程化】
    【2023校园招聘】 钉钉AI应用开发平台开始校招拉~
    程序猿怎么选赛道|规划
    金仓数据库KingbaseES客户端编程接口指南-Gokb (5. 程序示例 )
  • 原文地址:https://blog.csdn.net/TUSTer_/article/details/134354930