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

现在让这些图片同时显示。

方法一

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

import matplotlib.pyplot as plt
import numpy as npN=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.shapeX=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 Xelse: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 Xelse: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 Xelse: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.shapeX=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 Xelse: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 Xelse: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 Xelse: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 mX=np.zeros([(n+d)*rows,(m+d)*cols,3],dtype=int)page=0for row in range(rows):for col in range(cols):if page>=num:breakfor i in range(n):for j in range(m):X[row*(n+d)+i][col*(m+d)+j]=data[page][i][j]page+=1plt.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张图片

运行结果:

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

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

  1. python怎么清屏_python实现清屏的方法 Python Shell中清屏一般有两种方法。

    Python Shell 怎样清屏? Python Shell中清屏一般有两种方法. 奈何一个人随着年龄增长,梦想便不复轻盈:他开始用双手掂量生活,更看重果实而非花朵.--叶芝<凯尔特的搏暮&g ...

  2. python租车系统_使用Python实现租车计费系统的两种方法

    您的位置:首页 > 站长学院 > 网络技术    正文内容 使用Python实现租车计费系统的两种方法 使用Python实现租车计费系统的两种方法 更新时间:2018-09-29 18:0 ...

  3. python列表list元素降序排列两种方法

    python列表list元素降序排列的两种方法 sort()方法 python列表内置了一个sort()方法,可以用于为元素列表进行排序,当将默认参数reverse设置为True,sort()方法将为 ...

  4. python出租车计费标准_使用Python实现租车计费系统的两种方法

    要求: #出租车计费************************************************************************************** # 要 ...

  5. Web 之 html 如何显示隐藏Html元素的两种方法简单整理

    Web 之 html 如何显示隐藏Html元素的两种方法简单整理 目录 Web 之 html 如何显示隐藏Html元素的两种方法简单整理 一.简单介绍 二.实现原理 三.注意事项 四.代码示例 一.简 ...

  6. 用python打开视频_Python读取视频的两种方法(imageio和cv2)

    用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...

  7. python画图颜色填充_python画图的两种方法

    python如何画图?这里给大家介绍两款python绘图的库:turtle和Matplotlib. 相关推荐:<python视频> 1 安装turtle Python2安装命令:pip i ...

  8. python简单绘图步骤_python画图的两种方法

    python如何画图?这里给大家介绍两款python绘图的库:turtle和Matplotlib. 1 安装turtle Python2安装命令:pip install turtule Python3 ...

  9. python requirements.txt_python生成requirements.txt的两种方法

    这篇文章主要介绍了python生成requirements.txt的两种方法,每种方法给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 python项目如何在另一个环境上重新构建项目 ...

最新文章

  1. Android 侧划菜单
  2. php mssql 端口,MSSQL_SQL Server端口更改后的数据库连接方式,SQL Server端口,大家可以通过quot - phpStudy...
  3. c语言getchar用法_C语言 — 关键字
  4. ubuntu上面svn用merge合并到之前的版本
  5. 类加载器 jboss_JBoss AS 7类加载说明
  6. 【渝粤题库】广东开放大学 文化投资与贸易 形成性考核
  7. com编程创建快捷方式中文_如何以编程方式为博客创建wordcloud?
  8. CREAMy简洁大气模板Typecho主题
  9. 为什么很多公司只给博士发安家费,却不给研究生和本科生发?
  10. sys.fn_dblog
  11. 【转】JMeter脚本的参数化
  12. php 扩展jpeg,php重新编译,gd扩展支持jpeg文件-Go语言中文社区
  13. 对于JavaScript产生闭包的个人理解
  14. jdk7 linux 32位 安装包 微云网盘下载
  15. 新装主机测试性能软件,装机必看 如何快速测试电脑性能?
  16. 华为笔记本linux双系统,华为MateBook笔记本安装Win10与Ubuntu双系统
  17. java加按钮_剪辑大神都在用的加字幕神器,你知道嘛
  18. MOOCad Visual Analysis of Anomalous Learing Activities in Massive Open Online Courses
  19. android 拍照和相册,Android 拍照和从相册选照片
  20. linux如何设置串口参数,串口通信的参数如何设置

热门文章

  1. 如果我写一个开源的HIS软件
  2. latex教程——读书笔记整理(三)——数学公式
  3. 服务器 微信报警平台,Zabbix实现微信报警
  4. matlab单边带调制仿真,000单边带调制MATLAB模拟仿真
  5. LeetCode 复数乘法
  6. html的div双线边框,设置div边框
  7. 前端使用pdf.js插件在线浏览pdf
  8. hdoj 4288coder cf 85d Sum of Medians
  9. 人工智能时代对会计行业的改变与反思
  10. 大白话5分钟带你走进人工智能-第七节梯度下降之梯度概念和梯度迭代过程(2)