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 相关文章推荐
Python实现的简单万年历例子分享
Apr 25 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
情人节快乐! python绘制漂亮玫瑰
Aug 18 Python
Python2和Python3的共存和切换使用
Apr 12 Python
pyqt5 QProgressBar清空进度条的实例
Jun 21 Python
python实现的批量分析xml标签中各个类别个数功能示例
Dec 30 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
python datetime处理时间小结
Apr 16 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
Keras中的两种模型:Sequential和Model用法
Jun 27 Python
Python Pillow(PIL)库的用法详解
Sep 19 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新手上路(十二)
2006/10/09 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
javascript获取作用在元素上面的样式属性代码
2012/09/20 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
JS实现仿google、百度搜索框输入信息智能提示的实现方法
2015/04/20 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
php main 与 iframe 相互通讯类(js+php同域/跨域)
2017/09/14 Javascript
JS实现为动态创建的元素添加事件操作示例
2018/03/17 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
python使用socket远程连接错误处理方法
2015/04/29 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
可能是最全面的 Python 字符串拼接总结【收藏】
2018/07/09 Python
Python全排列操作实例分析
2018/07/24 Python
Python面向对象程序设计多继承和多态用法示例
2019/04/08 Python
Django中create和save方法的不同
2019/08/13 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
python中spy++的使用超详细教程
2021/01/29 Python
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
高品质和独特的产品世界:Creations and Collections
2018/01/07 全球购物
Koral官方网站:女性时尚运动服
2019/04/10 全球购物
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
介绍Ibatis的核心类
2013/11/18 面试题
留学推荐信怎么写
2014/01/25 职场文书
致200米运动员广播稿
2014/02/06 职场文书
自考毕业自我鉴定
2014/03/18 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
学校德育工作总结2015
2015/05/11 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers