python实现拼接图片


Posted in Python onMarch 23, 2020

最近在写一篇卷积神经网络的论文,有好多实验结果需要整理,本来是用美图秀秀进行图像的拼接,但是发现重复操作太多,而且拼接效果不好,想到用python写个脚本实现,看一个简单的例子:

python实现拼接图片

横向拼接

首先我需要将同一张图片的变形拼接为一行,代码如下:

import os
from PIL import Image

UNIT_SIZE = 229 # 单个图像的大小为229*229
TARGET_WIDTH = 6 * UNIT_SIZE # 拼接完后的横向长度为6*229

path = "C:/Users/zm/Desktop/FinalResult/Other-Reconstruction/2"
images = [] # 先存储所有的图像的名称
for root, dirs, files in os.walk(path):  
 for f in files :
  images.append(f)
for i in range(len(images)/6): # 6个图像为一组
 imagefile = []
 j = 0
 for j in range(6):
  imagefile.append(Image.open(path+'/'+images[i*6+j])) 
 target = Image.new('RGB', (TARGET_WIDTH, UNIT_SIZE)) 
 left = 0
 right = UNIT_SIZE
 for image in imagefile:  
  target.paste(image, (left, 0, right, UNIT_SIZE))# 将image复制到target的指定位置中
  left += UNIT_SIZE # left是左上角的横坐标,依次递增
  right += UNIT_SIZE # right是右下的横坐标,依次递增
  quality_value = 100 # quality来指定生成图片的质量,范围是0~100
  target.save(path+'/result/'+os.path.splitext(images[i*6+j])[0]+'.jpg', quality = quality_value)
 imagefile = []

纵向拼接

将每种类型的图片拼接为一行六个的图片后再将这些图片纵向拼接在一起,总共3种图像,那么有3行

import os
from PIL import Image

UNIT_SIZE = 229 # 图像的高
TARGET_WIDTH = 6 * UNIT_SIZE # 一行有6个图像,那么是6*229那么宽

path = "C:/Users/zm/Desktop/FinalResult/Other-Reconstruction/2/result"
imagefile = [] 
for root, dirs, files in os.walk(path):  
 for f in files :
  imagefile.append(Image.open(path+'/'+f)) 
target = Image.new('RGB', (TARGET_WIDTH, UNIT_SIZE*3)) # 最终拼接的图像的大小为(229*3) * (229*6)
left = 0
right = UNIT_SIZE
for image in imagefile:  
 target.paste(image, (0, left, TARGET_WIDTH, right))
 left += UNIT_SIZE # 从上往下拼接,左上角的纵坐标递增
 right += UNIT_SIZE #左下角的纵坐标也递增 
 quality_value = 100
 target.save(path+'/result.jpg', quality = quality_value)

同时横向纵向拼接

今天需要处理的图片如下:左边是图片所在的文件夹,每个文件夹的图片如→_→右边所示,需要拼接为2*5的图片。

python实现拼接图片

写的脚本如下:

import os
from PIL import Image

UNIT_SIZE = 229 # the size of image 
def pinjie(images,num):
 target = Image.new('RGB', (UNIT_SIZE*5, UNIT_SIZE*2)) # result is 2*5
 leftone = 0
 lefttwo = 0
 rightone = UNIT_SIZE
 righttwo = UNIT_SIZE
 for i in range(len(images)):
  if(i%2==0):
   target.paste(images[i], (leftone, 0, rightone, UNIT_SIZE))
   leftone += UNIT_SIZE #第一行左上角右移
   rightone += UNIT_SIZE #右下角右移
  else:
   target.paste(images[i], (lefttwo, UNIT_SIZE, righttwo, UNIT_SIZE*2))
   lefttwo += UNIT_SIZE #第二行左上角右移
   righttwo += UNIT_SIZE #右下角右移 
 quality_value = 100
 target.save(path+dirlist[num]+'.jpg', quality = quality_value)

path = "C:/Users/laojbdao/Desktop/FinalResult/result4/different_distribution/"
dirlist = [] # all dir name
for root, dirs, files in os.walk(path):  
 for dir in dirs :
  dirlist.append(dir)

num = 0
for dir in dirlist:
 images = [] # images in each folder
 for root, dirs, files in os.walk(path+dir): # traverse each folder
  print path+dir+''
  for file in files:
   images.append(Image.open(path+dir+'/'+file))
 pinjie(images,num)
 num +=1
 images = []

python实现拼接图片

本文已被收录到专题《python图片处理操作》 ,欢迎大家点击学习更多精彩内容。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3基础之list列表实例解析
Aug 13 Python
python基础教程之对象和类的实际运用
Aug 29 Python
使用Python绘制图表大全总结
Feb 11 Python
浅析python中SQLAlchemy排序的一个坑
Feb 24 Python
解决Python中list里的中文输出到html模板里的问题
Dec 17 Python
代码实例讲解python3的编码问题
Jul 08 Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 Python
Python Flask框架实现简单加法工具过程解析
Jun 03 Python
通过实例解析python and和or使用方法
Nov 14 Python
python实现文件分片上传的接口自动化
Nov 19 Python
python实现定时发送邮件到指定邮箱
Dec 23 Python
python爬虫今日热榜数据到txt文件的源码
Feb 23 Python
python使用PIL剪切和拼接图片
Mar 23 #Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 #Python
python实现单张图像拼接与批量图片拼接
Mar 23 #Python
OpenCV Python实现拼图小游戏
Mar 23 #Python
PYcharm 激活方法(推荐)
Mar 23 #Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 #Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
Mar 23 #Python
You might like
快速解决PHP调用Word组件DCOM权限的问题
2017/12/27 PHP
Laravel中正确地返回HTTP状态码方法示例
2019/09/10 PHP
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
jQuery.extend 函数的详细用法
2012/06/27 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
jquery遍历数组与筛选数组的方法
2013/11/05 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
jQuery使用模式窗口实现在主页面和子页面中互相传值的方法
2016/03/01 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
微信小程序实现pdf、word等格式文件上传的方法
2019/09/10 Javascript
vue的路由映射问题及解决方案
2019/10/14 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
OpenLayer学习之自定义测量控件
2020/09/28 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python中的startswith和endswith函数使用实例
2014/08/25 Python
python中实现定制类的特殊方法总结
2014/09/28 Python
python选择排序算法实例总结
2015/07/01 Python
利用Python查看微信共同好友功能的实现代码
2019/04/24 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
Python读取yaml文件的详细教程
2020/07/21 Python
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
请介绍一下WSDL的文档结构
2013/03/17 面试题
教学个人的自我评价分享
2014/02/16 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
国家领导干部党的群众路线教育实践活动批评与自我批评材料
2014/09/23 职场文书
党员干部公开承诺书范文
2015/04/27 职场文书
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
总结Python变量的相关知识
2021/06/28 Python
Vue3.0中Ref与Reactive的区别示例详析
2021/07/07 Vue.js
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis