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 第一步 hello world
Sep 25 Python
python模拟登陆阿里妈妈生成商品推广链接
Apr 03 Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
Jan 21 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
python多个模块py文件的数据共享实例
Jan 11 Python
python中pip的使用和修改下载源的方法
Jul 08 Python
python中class的定义及使用教程
Sep 18 Python
pytorch:实现简单的GAN示例(MNIST数据集)
Jan 10 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
class类在python中获取金融数据的实例方法
Dec 10 Python
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
Jun 05 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/11/24 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
PHP模块化安装教程
2016/06/01 PHP
PHP实现的分页类定义与用法示例
2017/07/05 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
php-7.3.6 编译安装过程
2020/02/11 PHP
treepanel动态加载数据实现代码
2012/12/15 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
利用jQuery实现打字机字幕效果实例代码
2016/09/02 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
vue.js实现备忘录demo
2019/06/26 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
python操作日期和时间的方法
2014/03/11 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
Python开发网站目录扫描器的实现
2019/02/21 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
2020/02/11 Python
python中round函数保留两位小数的方法
2020/12/04 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
巴西补充剂和维生素购物网站:Natue
2019/06/17 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
2019年Java面试必问之经典试题
2012/09/12 面试题
广州足迹信息技术有限公司Java软件工程师试题
2014/02/15 面试题
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
商场消防演习方案
2014/02/12 职场文书
商超业务员岗位职责
2014/03/12 职场文书
新文化运动的口号
2014/06/21 职场文书
新闻稿怎么写
2015/07/18 职场文书
Vue通过懒加载提升页面响应速度
2021/05/10 Vue.js