Python同时显示多张图片在一个画面中(两种方法)
很多时候需要把很多图片同时显示到一个画面中,现在分享两个方法,这里我恰好拿之前写的爬取网上图片保存到本地的爬虫模型爬一些图片作为素材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同时显示多张图片在一个画面中(两种方法)相关推荐
- python怎么清屏_python实现清屏的方法 Python Shell中清屏一般有两种方法。
Python Shell 怎样清屏? Python Shell中清屏一般有两种方法. 奈何一个人随着年龄增长,梦想便不复轻盈:他开始用双手掂量生活,更看重果实而非花朵.--叶芝<凯尔特的搏暮&g ...
- python租车系统_使用Python实现租车计费系统的两种方法
您的位置:首页 > 站长学院 > 网络技术 正文内容 使用Python实现租车计费系统的两种方法 使用Python实现租车计费系统的两种方法 更新时间:2018-09-29 18:0 ...
- python列表list元素降序排列两种方法
python列表list元素降序排列的两种方法 sort()方法 python列表内置了一个sort()方法,可以用于为元素列表进行排序,当将默认参数reverse设置为True,sort()方法将为 ...
- python出租车计费标准_使用Python实现租车计费系统的两种方法
要求: #出租车计费************************************************************************************** # 要 ...
- Web 之 html 如何显示隐藏Html元素的两种方法简单整理
Web 之 html 如何显示隐藏Html元素的两种方法简单整理 目录 Web 之 html 如何显示隐藏Html元素的两种方法简单整理 一.简单介绍 二.实现原理 三.注意事项 四.代码示例 一.简 ...
- 用python打开视频_Python读取视频的两种方法(imageio和cv2)
用python读取视频有两种主要方法,大家可依据自己的需求进行使用. 方法一: 使用imageio库,没有安装的可用pip安装或自己下载,安装好后重启终端即可调用. import pylab impo ...
- python画图颜色填充_python画图的两种方法
python如何画图?这里给大家介绍两款python绘图的库:turtle和Matplotlib. 相关推荐:<python视频> 1 安装turtle Python2安装命令:pip i ...
- python简单绘图步骤_python画图的两种方法
python如何画图?这里给大家介绍两款python绘图的库:turtle和Matplotlib. 1 安装turtle Python2安装命令:pip install turtule Python3 ...
- python requirements.txt_python生成requirements.txt的两种方法
这篇文章主要介绍了python生成requirements.txt的两种方法,每种方法给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 python项目如何在另一个环境上重新构建项目 ...
最新文章
- 制作 OpenStack Linux 镜像 - 每天5分钟玩转 OpenStack(151)
- Socket技术详解(一篇就够了)
- php连接mysql数据并查询
- arm中断保护和恢复_浅谈ARM处理器的七种异常处理
- c语言中把一个数缩小十倍_小学数学易错点:一个数缩小10倍?缩小到它的十分之一?哪个正确?...
- Mac最常用快键键持续更新ing
- Swift - 多线程实现方式(3) - Grand Central Dispatch(GCD)
- 关于拉格朗日乘子法和KKT条件
- vijos 1471 线性DP+贪心
- 如何用ESP8266/ESP8285做一个WIFI中继(WiFi信号放大器)
- 推导多元最小二乘法的计算方法
- 软件工程—实践者的研究方法
- 长连接和短连接的定义区别,以及应用场景
- Kubernetes网络flannel之host-gw模式分析
- 请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用6.2f格式输出。
- FL Studio20.9DAW宿主电子音乐制作软件
- 线性变换的不变子空间和特征子空间的关系
- 老版人人商城提示“百度未授权地图API”
- E900V21C安装Linux系统(Armbian)
- 微信公众号对接电影网站,回复名称推送电影
热门文章
- Git Bash 下进行快速复制粘贴
- 《ChatGPT》自动写代码、写作文,使用教程来了
- 生存分析 R语言(四)——Cox PHM(3) 检查PHA和scale
- 给view添加单边阴影
- 数据治理之敏感数据探查
- 打开showModalDialog模式窗体并提交,且不打开新的IE窗口
- 记一次触发器定义者不同导致的sql异常TRIGGER command denied to user 'XXX' @'%' for table '...
- 全靠这套面试题,历经一年学弟从家里到了阿里,只要有梦想总会实现的
- Face Super-Resolution Guided by 3D Facial Priors(ECCV2020)论文解读
- 五分之二用计算机怎么按,2015年计算机等级考试上机应试技巧