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正则表达式实现截取成对括号的方法
Jan 06 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
python实现Flappy Bird源码
Dec 24 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
Apr 11 Python
python 猴子补丁(monkey patch)
Jun 26 Python
python 使用装饰器并记录log的示例代码
Jul 12 Python
python实现邮件自动发送
Aug 10 Python
Python logging设置和logger解析
Aug 28 Python
Python如何使用BeautifulSoup爬取网页信息
Nov 26 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
Python colormap库的安装和使用详情
Oct 06 Python
Python数据可视化之绘制柱状图和条形图
May 25 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实现ping
2006/10/09 PHP
文件上传程序的全部源码
2006/10/09 PHP
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
php利用scws实现mysql全文搜索功能的方法
2014/12/25 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
jquery 上下滚动广告
2009/06/17 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
2016/07/12 Javascript
详解Vue.js动态绑定class
2016/12/20 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
JS变量中有var定义和无var定义的区别以及es6中let命令和const命令
2017/02/19 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
对Angular中单向数据流的深入理解
2018/03/31 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
分享一款超好用的JavaScript 打包压缩工具
2020/04/26 Javascript
Python扫描IP段查看指定端口是否开放的方法
2015/06/09 Python
Python实现字典的遍历与排序功能示例
2017/12/23 Python
用Python识别人脸,人种等各种信息
2019/07/15 Python
Python操作MongoDb数据库流程详解
2020/03/05 Python
Python OrderedDict字典排序方法详解
2020/05/21 Python
Python下使用Trackbar实现绘图板
2020/10/27 Python
用python制作个视频下载器
2021/02/01 Python
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
在求职信中如何凸显个人优势
2013/10/30 职场文书
怎么写有吸引力的自荐信
2013/11/17 职场文书
给老师的道歉信
2014/01/11 职场文书
图书室管理制度
2014/01/19 职场文书
2014国培学习感言
2014/03/05 职场文书
三月学雷锋活动总结
2014/06/26 职场文书
办公室班子四风问题对照检查材料
2014/10/04 职场文书
团代会闭幕词
2015/01/28 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis
在redisCluster中模糊获取key方式
2021/07/09 Redis
Go获取两个时区的时间差
2022/04/20 Golang