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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
Python 26进制计算实现方法
May 28 Python
python爬虫获取京东手机图片的图文教程
Dec 29 Python
Django的HttpRequest和HttpResponse对象详解
Jan 26 Python
python操作oracle的完整教程分享
Jan 30 Python
Python实现随机生成手机号及正则验证手机号的方法
Apr 25 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
对python的bytes类型数据split分割切片方法
Dec 04 Python
Pandas透视表(pivot_table)详解
Jul 22 Python
Python使用re模块验证危险字符
May 21 Python
Django如何使用redis作为缓存
May 21 Python
Python使用pandas导入xlsx格式的excel文件内容操作代码
Dec 24 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
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
php扩展ZF――Validate扩展
2008/01/10 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
PHP安全性漫谈
2012/06/28 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
浅析Yii2 GridView实现下拉搜索教程
2016/04/22 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
Node.js 数据加密传输浅析
2016/11/16 Javascript
js实现刷新页面后回到记录时滚动条的位置【两种方案可选】
2016/12/12 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
[01:00:54]TI4正赛第二日开场
2014/07/20 DOTA
python生成指定尺寸缩略图的示例
2014/05/07 Python
Python实现的批量下载RFC文档
2015/03/10 Python
解决python使用open打开文件中文乱码的问题
2017/12/29 Python
详解Python中的正则表达式
2018/07/08 Python
python语音识别实践之百度语音API
2018/08/30 Python
python aiohttp的使用详解
2019/06/20 Python
用django-allauth实现第三方登录的示例代码
2019/06/24 Python
浅谈CSS3中display属性的Flex布局的方法
2017/08/14 HTML / CSS
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
2014年高三毕业生自我评价
2014/01/11 职场文书
大学生志愿者感言
2014/01/15 职场文书
校园之声广播稿
2014/01/31 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
《春晓》教学反思
2014/04/20 职场文书
西安事变观后感
2015/06/12 职场文书
工作一年自我鉴定
2019/06/20 职场文书