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异步回调机制实现和使用方法
Nov 26 Python
Python连接mssql数据库编码问题解决方法
Jan 01 Python
详解python如何调用C/C++底层库与互相传值
Aug 10 Python
python中异常捕获方法详解
Mar 03 Python
Unicode和Python的中文处理
Mar 19 Python
Python import与from import使用及区别介绍
Sep 06 Python
python使用BeautifulSoup与正则表达式爬取时光网不同地区top100电影并对比
Apr 15 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
Python叠加两幅栅格图像的实现方法
Jul 05 Python
Django框架视图介绍与使用详解
Jul 18 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
Jan 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 归并排序 数组交集
2011/05/10 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
JavaScript版代码高亮
2006/06/26 Javascript
javascript实现的动态添加表单元素input,button等(appendChild)
2007/11/24 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
THREE.JS入门教程(1)THREE.JS使用前了解
2013/01/24 Javascript
巧用局部变量提升javascript性能
2014/02/24 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
JavaScript中的getDay()方法使用详解
2015/06/09 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
JS简单获取日期相差天数的方法
2017/04/24 Javascript
Express框架之connect-flash详解
2017/05/31 Javascript
angular.extend方法的具体使用
2017/09/14 Javascript
Angular4学习之Angular CLI的安装与使用教程
2018/01/04 Javascript
vue element项目引入icon图标的方法
2018/06/06 Javascript
详解Vuex下Store的模块化拆分实践
2019/07/31 Javascript
vue 验证码界面实现点击后标灰并设置div按钮不可点击状态
2019/10/28 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
2018/07/04 Python
Pycharm无法显示动态图片的解决方法
2018/10/28 Python
python实现视频读取和转化图片
2019/12/10 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
Pycharm github配置实现过程图解
2020/10/13 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
美国著名的品牌折扣店:Burlington
2017/06/08 全球购物
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
土地转让协议书范本
2014/04/15 职场文书
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL