Python同时显示多张图片在一个画面中(两种方法)

2023-11-16

很多时候需要把很多图片同时显示到一个画面中,现在分享两个方法,这里我恰好拿之前写的爬取网上图片保存到本地的爬虫模型爬一些图片作为素材Python 爬虫批量爬取网页图片保存到本地
得到素材如下所示:
在这里插入图片描述
现在让这些图片同时显示。

方法一

subplot函数,这个方法比较简单,这个函数会把每个图片作为一个单独的部分自动整合到同一个画面中 ,使用方法如下:

import matplotlib.pyplot as plt
import numpy as np

N=4
M=8
#形成NxM大小的画布
for i in range(27):#有27张图片
    path='pictures//变形金刚'+str(i)+'.jpg'
    img = plt.imread(path)
    plt.subplot(N,M,i+1)#表示第i张图片,下标只能从1开始,不能从0,
    plt.imshow(img)
    #下面两行是消除每张图片自己单独的横纵坐标,不然每张图片会有单独的横纵坐标,影响美观
    plt.xticks([])
    plt.yticks([])
plt.show()

运行结果如下:
在这里插入图片描述上面这个代码的好处就是比较简洁,但是也有麻烦的,就是你缩放整个界面大小,每个图片之间的距离会发生变化,原因是每个图片还是一个单一的部分,下面介绍一个复杂的。

方法二

自定义,把所有图片合并成一张图片,当计算机读取图片时,图片本质就是一堆数字,这里需要修改下每张图片的尺寸,于是我自己用分治思想手写了个修改函数,点击这里查看Python手写修改图像尺寸大小的函数–利用二分+递归的原理

完整代码如下:

import matplotlib.pyplot as plt
import numpy as np
def reshape_pictures1(data,N):#改变竖直方向大小
    n,m,d=data.shape
    X=np.zeros([N,m,d],dtype=int)
    if n>N:
        if n%N==0:#判断是否为倍数关系,如果是可以直接修改
            d=int(n/N)
            for i in range(N):
                X[i]=data[i*d]
            return X
        else:
            mid1=int(n/2)
            mid2=int(N/2)
            if 0<mid1:
                X[0:mid2]=reshape_pictures1(data[0:mid1],mid2)#递归
            if mid1<n:
                X[mid2:N]=reshape_pictures1(data[mid1:n],N-mid2)#递归
            return X
    else:
        if N%n==0:
            d=int(N/n)
            for i in range(n):
                for j in range(d):
                    X[i*d+j]=data[i]
            return X
        else:
            mid1=int(n/2)
            mid2=int(N/2)
            if 0<mid1:
                X[0:mid2]=reshape_pictures1(data[0:mid1],mid2)#递归
            if mid1<n:
                X[mid2:N]=reshape_pictures1(data[mid1:n],N-mid2)#递归
            return X
def reshape_pictures2(data,M):#改变水平方向大小
    n,m,d=data.shape
    X=np.zeros([n,M,d],dtype=int)
    if m>M:
        if m%M==0:
            d=int(m/M)
            for i in range(M):
                X[:,i]=data[:,i*d]
            return X
        else:
            mid1=int(m/2)
            mid2=int(M/2)
            if 0<mid1:
                X[:,0:mid2]=reshape_pictures2(data[:,0:mid1],mid2)
            if mid1<m:
                X[:,mid2:M]=reshape_pictures2(data[:,mid1:m],M-mid2)
            return X
    else:
        if M%m==0:
            d=int(M/m)
            for i in range(m):
                for j in range(d):
                    X[:,i*d+j]=data[:,i]
            return X
        else:
            mid1=int(m/2)
            mid2=int(M/2)
            if 0<mid1:
                X[:,0:mid2]=reshape_pictures2(data[:,0:mid1],mid2)
            if mid1<m:
                X[:,mid2:M]=reshape_pictures2(data[:,mid1:m],M-mid2)
            return X
def reshape_pictures(data,N,M):#最终的修改函数
    X=reshape_pictures1(data,N)#修改竖直方向使得大小一致
    X=reshape_pictures2(X,M)#修改水平方向使得大小一致
    return X
#data表示所有图片合集,n和m分别表示每个图片要显示的大小,d表示图片之间的间隔单位
#row和col分别表示画面的长和宽
def show_pictures(data,n,m,d,rows,cols):
    num=len(data)#得到图片数目
    for i in range(num):#修改所有图片尺寸
        data[i]=reshape_pictures(data[i],n,m)#修改尺寸为n x m
    X=np.zeros([(n+d)*rows,(m+d)*cols,3],dtype=int)
    page=0
    for row in range(rows):
        for col in range(cols):
            if page>=num:
                break
            for i in range(n):
                for j in range(m):
                    X[row*(n+d)+i][col*(m+d)+j]=data[page][i][j]
            page+=1
    plt.imshow(X)
    plt.xticks([])#删除坐标刻度
    plt.yticks([])#删除坐标刻度
    plt.show()

if __name__ == '__main__':
    data=[]
    for i in range(27):#有27张图片
        path='pictures//变形金刚'+str(i)+'.jpg'
        img = plt.imread(path)#读取图片
        reshape_pictures(img,400,400)
        data.append(img)
    show_pictures(data,100,100,1,4,8)#图片大小为100x100,图片间隔为1,整个界面内容为4x8=32张图片

运行结果:
在这里插入图片描述

希望我的分享对你的学习有所帮助,如果有问题请及时指出,谢谢~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python同时显示多张图片在一个画面中(两种方法) 的相关文章

  • 使用 python 进行串行数据记录

    Intro 我需要编写一个小程序来实时读取串行数据并将其写入文本文件 我在读取数据方面取得了一些进展 但尚未成功地将这些信息存储在新文件中 这是我的代码 from future import print function import se
  • python future 和元组解包

    实现像使用 future 进行元组解包这样的事情的优雅 惯用的方法是什么 我有这样的代码 a b c f x y g a b z h y c 我想将其转换为使用期货 理想情况下我想写一些类似的东西 a b c ex submit f x y
  • 如何使用 imaplib 获取“消息 ID”

    我尝试获取一个在操作期间不会更改的唯一 ID 我觉得UID不好 所以我认为 Message ID 是正确的 但我不知道如何获取它 我只知道 imap fetch uid XXXX 有人有解决方案吗 来自 IMAP 文档本身 IMAP4消息号
  • 如何在 pytest 中将单元测试和集成测试分开

    根据维基百科 https en wikipedia org wiki Unit testing Description和各种articles https techbeacon com devops 6 best practices inte
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 如何计算numpy数组中元素的频率?

    我有一个 3 D numpy 数组 其中包含重复的元素 counterTraj shape 13530 1 1 例如 counterTraj 包含这样的元素 我只显示了几个元素 array 136 129 130 103 102 101 我
  • 为什么Python的curses中escape键有延迟?

    In the Python curses module I have observed that there is a roughly 1 second delay between pressing the esc key and getc
  • 切片 Dataframe 时出现 KeyError

    我的代码如下所示 d pd read csv Collector Output csv df pd DataFrame data d dfa df copy dfa dfa rename columns OBJECTID Object ID
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 如何从Python中的字符串中提取变量名称和值

    我有一根绳子 data var1 id 12345 name John White python中有没有办法将var1提取为python变量 更具体地说 我对字典变量感兴趣 这样我就可以获得变量的值 id和name python 这是由提供
  • 奇怪的 MySQL Python mod_wsgi 无法连接到 'localhost' (49) 上的 MySQL 服务器问题

    StackOverflow上也有类似的问题 但我还没有发现完全相同的情况 这是在使用 MySQL 的 OS X Leopard 机器上 一些起始信息 MySQL Server version 5 1 30 Apache 2 2 13 Uni
  • 按元组分隔符拆分列表

    我有清单 print L I WW am XX newbie YY ZZ You WW are XX cool YY ZZ 我想用分隔符将列表拆分为子列表 ZZ print new L I WW am XX newbie YY ZZ You
  • Seaborn Pairplot 图例不显示颜色

    我一直在学习如何在Python中使用seaborn和pairplot 这里的一切似乎都工作正常 但由于某种原因 图例不会显示相关的颜色 我无法找到解决方案 因此如果有人有任何建议 请告诉我 x sns pairplot stats2 hue
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 使用 PyTorch 分布式 NCCL 连接失败

    我正在尝试使用 torch distributed 将 PyTorch 张量从一台机器发送到另一台机器 dist init process group 函数正常工作 但是 dist broadcast 函数中出现连接失败 这是我在节点 0
  • 当鼠标悬停在上面时,intellisense vscode 不显示参数或文档

    我正在尝试将整个工作流程从 Eclipse 和 Jupyter Notebook 迁移到 VS Code 我安装了 python 扩展 它应该带有 Intellisense 但它只是部分更糟糕 我在输入句点后收到建议 但当将鼠标悬停在其上方
  • 字典和数组作为类变量与实例变量

    这是赚取积分的简单方法 请解释以下内容 class C a b 0 c def init self self x def d self k v self x k v self a k v self b v self c append v d
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x
  • Elastic Beanstalk 中的 enum34 问题

    我正在尝试在 Elastic Beanstalk 中设置 django 环境 当我尝试通过requirements txt 文件安装时 我遇到了python3 6 问题 File opt python run venv bin pip li
  • 检查字典键是否有空值

    我有以下字典 dict1 city name yass region zipcode phone address tehsil planet mars 我正在尝试创建一个基于 dict1 的新字典 但是 它不会包含带有空字符串的键 它不会包

随机推荐

  • python request 爬虫爬取起点中文网小说

    1 网页分析 进入https www qidian com 点击全部 进行翻页 你就会发现一个规律 url https www qidian com all orderId style 1 pageSize 20 siteid 1 pubf
  • Windows下安装GPU版本的PyTorch(防踩坑)

    预言 防踩坑 恭喜你 比较幸运 安装GPU版本的PyTorch找到了此博文 博主最初因操作不利 由于自身轻微强迫症 完美主义强行刷机重装系统两次 再次声明 用于NLP中的GPU加速 不用单独安装VS CUDA cuDNN 请耐心看此博文 两
  • [牛客网]oj输入输出练习

    a b 多组 import java util public class Main public static void main String args Scanner scanner new Scanner System in Arra
  • 创建Google play开发者账号,并验证身份通过

    一 注册前准备 最好准备一台没有怎么用过Google的电脑和 准备一个没有注册过Google的手机号 准备一张信用卡或者借记卡 需要支付 25 支持的类型如下图 这里还需注意 最后账号注册成功还需要验证身份也就是实名认证 那么Google去
  • 在Windows Server上使用IIS部署Python-Flask项目

    1 安装Flask与wfastcgi pip install Flask pip install wfastcgi 1 python安装wfastcgi并激活 2 进入python安装目录下的scripts文件夹然后运行wfastcgi e
  • 15黑马笔记之二叉树的递归遍历求叶子节点数

    15黑马笔记之二叉树的递归遍历求叶子节点数 1 思想 对每一个节点遍历其左右孩子 若都为空 则是叶子节点 递归结束条件 传进的节点不为空 代码基本只是在递归遍历的基础上加了统计叶子数的变量 2 具体代码实现 例子 include
  • nginx 反向代理 ssh连接办公室win电脑

    1 生产密钥免密连接服务器 ssh keygen 复制win电脑上的 ssh id rsa pu到服务器 root ssh 目录下 cat id rsa pub gt gt authorized keys sudo chmod 600 au
  • windows11安装wsl2(linux)+VScode+ miniconda+TVM+python环境部署

    在wsl上运行 TVM demo 环境配置 预备加速工具 vpn 清华镜像 第一次安装 失败 1 Windows11 D盘安装wls linux 2 安装vscode并连接到WSL2 3 wsl 安装miniconda 4 wls安装TVM
  • JavaSE基础学习

    JavaSE基础笔记 锦苏的个人笔记 首先声明 这个笔记是根据韩顺平老师 讲的Java课程全程来学习并且做笔记的 如果各位小伙伴们 需要从事Java行业那么从开始决定学习了 就不要放弃 三天打鱼两天晒网这是我的真实写照 我希望不是大家的真实
  • openwrt恢复默认设置

    如果通过无线或者有线口无法连接到router 可以用恢复某些设置重新设置路由器 1 开机 等着一个工作灯亮的时候立即按下rest键2秒 然后就开始拼命闪烁 很好现在进入failsafe模式了 2 设置电脑的ip为静态ip 192 168 1
  • 数据库中的binlog、redolog、undolog的区别

    binlog二进制日志是mysql server层的 主要是做主从复制 时间点恢复使用 redo log重做日志是InnoDB存储引擎层的 用来保证事务安全 undo log回滚日志保存了事务发生之前的数据的一个版本 可以用于回滚 同时可以
  • 线程池之阻塞主线程,等子线程全部跑完之后,执行主线程

    在spark中有异步多线程的需求 需要阻塞主线程 等所有子线程都执行完成后 主线程继续执行 如果是用Thread 不太好实现 用Callable FutrueTask结合线程池 可以快速实现 final AtomicInteger mess
  • 基于Java+SSM项目的计算机毕业设计-毕业生离校管理系统项目实战(附论文+源码)

    大家好 我是职场程序猿 感谢您阅读本文 欢迎一键三连哦 当前专栏 Java毕业设计 精彩专栏推荐 安卓app毕业设计 微信小程序毕业设计 演示视频 ssm147毕业生离校离校管理系统演示 源码下载地址 https download csdn
  • 数论算法:唯一因子分解定理

    这里讲一下算法中常用到的唯一因子分解定理 合数a仅能以一种方式写成如下乘积形式 a p1 e1 p2 e2 pr er 其中pi为素数 p1
  • Vue基本知识1,安装创建以及常用指令

    Vue基本知识1 安装创建以及常用指令 1 Vue的概念 概念 vue是一个渐进式的JavaScript开发框架 基于MVVM实现数据驱动的框架 官网 还可以用来做SPA single page web application 一个网页就是
  • Qt udp数据发送太快,数据丢失

    Qt 在单线程中 如果数据发送太快 应用程序还在处理别的程序 就会触发不了readyRead信号 导致造成数据的丢失 解决方法可以将udp处理类继承于QThread 在多线程入口run函数里通过死循环接收数据 通过信号槽机制通知处理函数进行
  • 微信小程序&PHP 改变小程序码中间logo的方法

    需求 获取小程序码 小程序码中间logo换成用户头像 仔细看了小程序本身的程序 没有发现好的方法 如果有 不吝赐教呀 所以改变方法 把头像传回后台 使用 php gd库在后台操作 然后传回小程序端 初始数据准备 define PATH op
  • Hive的联级(cascade)- 修改分区表的字段类型或者增加新字段

    一 问题描述 踩坑 数仓的分区表 由于需求需要 要把int类型的字段改为bigint 我直接执行的以下语句 alter table table name change column 字段 字段 bigint 出现的问题 之后的分区数据可以正
  • 经济复苏!!! ReportLinker调整2020-2027 IMU市场预测金额至335亿美元

    2022年10月 市场研究机构ReportLinker发布了2020 2027全球IMU市场预测报告 报告预测到2027年全球IMU市场金额将达到236亿美元 2020 2027年期间复合增长率为5 4 新冠过后 经济复苏 ReportLi
  • Python同时显示多张图片在一个画面中(两种方法)

    很多时候需要把很多图片同时显示到一个画面中 现在分享两个方法 这里我恰好拿之前写的爬取网上图片保存到本地的爬虫模型爬一些图片作为素材Python 爬虫批量爬取网页图片保存到本地 得到素材如下所示 现在让这些图片同时显示 方法一 subplo