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在信息学竞赛中的运用及Python的基本用法(详解)
Aug 15 Python
如何使用 Pylint 来规范 Python 代码风格(来自IBM)
Apr 06 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
May 18 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
May 29 Python
python 顺时针打印矩阵的超简洁代码
Nov 14 Python
利用python修改json文件的value方法
Dec 31 Python
python 实现GUI(图形用户界面)编程详解
Jul 17 Python
python 爬取古诗文存入mysql数据库的方法
Jan 08 Python
基于Pycharm加载多个项目过程图解
Jan 19 Python
Python 实现键盘鼠标按键模拟
Nov 18 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
Python 用户输入和while循环的操作
May 23 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
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php die()与exit()的区别实例详解
2016/12/03 PHP
PHP实现的策略模式示例
2019/03/20 PHP
javascript css float属性的特殊写法
2008/11/13 Javascript
JavaScript聚焦于第一个字段的代码
2010/10/15 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
javascript禁止超链接跳转的方法
2016/02/02 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
jquery获取select,option所有的value和text的实例
2017/03/06 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
prettier自动格式化去换行的实现代码
2020/08/25 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
python操作xml文件详细介绍
2014/06/09 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
Python简单读写Xls格式文档的方法示例
2018/08/17 Python
python如何实现数据的线性拟合
2019/07/19 Python
python、Matlab求定积分的实现
2019/11/20 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
python实现拼接图片
2020/03/23 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
介绍一下OSI七层模型
2012/07/03 面试题
少先队学雷锋活动月总结
2014/03/09 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
销售岗位职责范本
2014/06/12 职场文书
横幅标语大全
2014/06/17 职场文书
募捐感谢信
2015/01/22 职场文书
中学总务处工作总结
2015/08/12 职场文书
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android