python实现拼合两个文件夹中的图片,保存到新文件夹中。

python实现拼合两个文件夹中的图片(可批量处理多个文件夹)

近期因为课题的需要,自己要将多个文件夹中的图片两两拼合(左右拼合),具体的问题是这样的:我有5个装有图片的文件夹,每个文件夹里50张图片,现在我需要将5个文件夹两两组合(可以自己跟自己组合,一共25种组合),然后左边图片的文件夹不改变,右边图片的文件夹里面的图片用random.shuffle()方法进行打乱五次。这样每两个文件夹组合得到的250张图片。

实现图片拼合的原理

实现图片拼合的方法:首先用os.listdir()导入图片所在文件路径,这样方便后面读取图片,读取到图片后,用PIL 包和matplotlib包中的方法将图片转换成多维数组形式,这样就能将两个图片拼接的问题转换成两个多维数组的合并,然后再用Image.fromarray()将多维数组给转换成图片,这样就大功告成了。

需要拼接的图片

文件夹中50个图片
先看看最终效果图:

最终效果是两个图左右拼合,得到的图宽度不变,高度按较高的为准,图片高度不够的用黑底上下对称填充。

  1. 目标文件夹 ,我合并的五个文件夹;

  2. 最终得到文件夹结果图片 新文件夹的命名是以合并两个文件夹的名字拼接得到的;

  3. 直接上代码 代码中有部分注释;

#导入相应的包
import numpy as np
import os
import matplotlib.image as mp
from skimage import img_as_ubyte
from PIL import Image
import random
import shutil
import cv2
img_path = "C:\\Users\\Acer\\Desktop\\test"                  #需要拼接图片的地址(里面只放需要拼接的文件夹,我的是五个图片目录)
img_output_path = "C:\\Users\\Acer\\Desktop\\images\\"       #保存拼接后图片的地址
filelist =[]
shuffle_num = 5                  #打乱五次目录顺序
jpg_path = os.listdir(img_path)
for i in range(len(jpg_path)):                      # 读取目录文件夹中的五个图片目录,并把目录存放在filelist[1]中#print(jpg_path[i])#print(img_path+str('\\')+str(jpg_path[i]))filelist.append(img_path+str('\\')+str(jpg_path[i]))   #拼接五个目录图片文件夹地址print(filelist[i])                       #"C:\\Users\\Acer\\Desktop\\test\\a"for i in range(len(jpg_path)):        # 左边的文件夹个数f1 = os.listdir(filelist[i])      #读取左边文件目录#print(filelist[i])for j in range(len(jpg_path)):    #右边的文件夹个数f2 = os.listdir(filelist[j])  #读取右边文件目录if os.path.exists(img_output_path+str(jpg_path[i])+str(jpg_path[j])):   #如果存在目录,则删除目录及里面的文件shutil.rmtree(img_output_path+str(jpg_path[i])+str(jpg_path[j]))os.mkdir(img_output_path+str(jpg_path[i])+str(jpg_path[j]))           #创建存放拼接后的目录(目录以两个文件夹共同命名)#print(img_output_path+str(jpg_path[i])+str(jpg_path[j]))for k in range(5):           #右边文件打乱5次顺序然后跟左边文件拼接print(f2)random.shuffle(f2)rf2 = f2print(rf2)for l in range(50):        #将左右目录按文件读取顺序进行拼接#print(str(f1[l])+str(f2[l]))#print(i,j,k)jpg1 = filelist[i]+str("\\") +f1[l]print(jpg1)#print("***")jpg2 = filelist[j]+str("\\") +rf2[l]print(jpg2)print(l)#jpg1 = f1[l]  # 拼接图像的读取地址#jpg2 = f2[l]# 对图像数据类型转换image1 = mp.imread(jpg1)image2 = mp.imread(jpg2)image1 = img_as_ubyte(image1)image2 = img_as_ubyte(image2)result_img1 = Image.fromarray(image1)result_img2 = Image.fromarray(image2)img1 = np.array(result_img1)  # 转换为多维数组对象img2 = np.array(result_img2)if (img1.shape[0] > img2.shape[0]):if ((img1.shape[0] - img2.shape[0]) % 2 == 0):tc = int((img1.shape[0] - img2.shape[0]) / 2)top = tcbottom = tcelse:tc = int((img1.shape[0] - img2.shape[0]) / 2)top = tcbottom = tc + 1zh = cv2.imread(jpg2)  # 转换图片读取类型constant = cv2.copyMakeBorder(zh, top, bottom, 0, 0, cv2.BORDER_CONSTANT)cv2.imwrite(img_output_path + str("tmp.JPEG"), constant)tmpfile = os.listdir(img_output_path)jpg3 = img_output_path + str("tmp.JPEG")tmpimage = mp.imread(jpg3)tmpimage = img_as_ubyte(tmpimage)result_tmp = Image.fromarray(tmpimage)img2 = np.array(result_tmp)else:if ((img2.shape[0] - img1.shape[0]) % 2 == 0):tc = int((img2.shape[0] - img1.shape[0]) / 2)top = tcbottom = tcelse:tc = int((img2.shape[0] - img1.shape[0]) / 2)top = tcbottom = tc + 1zh = cv2.imread(jpg1)  # 转换图片读取类型constant = cv2.copyMakeBorder(zh, top, bottom, 0, 0, cv2.BORDER_CONSTANT)  # 填充cv2.imwrite(img_output_path + str("tmp.JPEG"), constant)tmpfile = os.listdir(img_output_path)jpg3 = img_output_path + str("tmp.JPEG")tmpimage = mp.imread(jpg3)tmpimage = img_as_ubyte(tmpimage)result_tmp = Image.fromarray(tmpimage)img1 = np.array(result_tmp)im3 = np.concatenate((img1, img2), axis=1)result_picture = Image.fromarray(im3)savepicture_name = img_output_path + str(jpg_path[i]) + str(jpg_path[j]) + str("\\") +str(k)+ str(f1[l].split(".")[0]) + str(rf2[l])result_picture.save(savepicture_name)#im3 = np.concatenate((img1, img2), axis=1)  # 对图片进行横向拼接# 生成图片#result_picture = Image.fromarray(im3)#savepicture_name = img_output_path + str(jpg_path[i]) + str(jpg_path[j]) +str("\\")+ str(f1[i].split(".")[0]) + str(rf2[j])  # 字符串拼接保存图像的地址#result_picture.save(savepicture_name)  # 保存图像os.remove(jpg3)     #删除临时图片
  1. 代码逻辑还不是很完善 有兴趣的大佬可以将生成图片那部分代码写个函数,传入两个两个图片的目录地址,然后进行操作,因为时间原因,我就没有修改了,不过这样的效果也是够用了;

记录一下自己摸索了两天的成果,中间各种踩坑,不过好在得到了自己想要的数据集,在python学习的道路上又前进了一步。

python图片拼合相关推荐

  1. python 图片 文本 矫正

    python 图片 文本 矫正 代码 # -*- coding: UTF-8 -*- import numpy as np import cv2 import os ## 图片旋转 def rotat ...

  2. python图片识别-Python+Opencv识别两张相似图片

    在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能就在本文简 ...

  3. python图片-利用python进行识别相似图片(一)

    文章简介 在网上看到python做图像识别的相关文章后,真心感觉python的功能实在太强大,因此将这些文章总结一下,建立一下自己的知识体系. 当然了,图像识别这个话题作为计算机科学的一个分支,不可能 ...

  4. python图片通道分离

    python图片通道分离 文章目录: 一.通道分离的方法 1.opencv的split()函数 2.使用Numpy 数组分离图像通道 二.通道合并的方法 1.opencv自带的merge() 函数 2 ...

  5. python图片转字符画

    学习了下python图片转字符画,学习连接:Python 图片转字符画,觉得还挺有趣,不过图片的颜色和细节不能太多,不然效果比较差,代码如下: from PIL import Image import ...

  6. python图片转文字_【收藏】图片转成文字的方法总结,python批量图片转文字信息参考源码...

    在日常办公或者学习中,往往存在这样一个工作场景,比如,"老王,我这里有一张图片,你把里面的文字信息给我整理出来",都2021年了,你真的还在手敲图片文字信息么?那么还不赶紧收藏这篇 ...

  7. python 图片转字符画

    python 图片转字符画 项目介绍 本实验用 50 行 Python 代码完成图片转字符画小工具.通过本实验将学习到 Linux 命令行操作,Python 基础,pillow 库的使用,argpar ...

  8. Python 图片与字符串互转

    Python 图片与字符串互转 1. 图片转化为base64字符串 2. base64字符串转化为图片 3. 图片转化为字符串 4. 字符串转化为图片 1. 图片转化为base64字符串 import ...

  9. python图片马赛克_Python实现PS滤镜中马赛克效果示例

    本文实例讲述了Python实现PS滤镜中马赛克效果.分享给大家供大家参考,具体如下: 这里利用 Python 实现PS 滤镜中的马赛克效果,具体的算法原理和效果可以参考附录说明,Python示例代码如 ...

最新文章

  1. mysql 数据库乱码
  2. JSP2.0语法初步掌握(学习笔记)
  3. Kibana 创建索引 POST 403 (forbidden) on create index
  4. 用Telnet 来用smtp发邮件。。 send mail by SMTP server
  5. 协议簇: Media Access Control(MAC) Frame 解析
  6. hadoop eclipse plugin windows下载集合
  7. HDFS概述(2)————Block块大小设置
  8. python学生管理系统用类写_python面向对象——学校学生教职工管理系统类的实例...
  9. 产品需求文档(PRD)的撰写方法
  10. android调用web接口,Android调用WebService系列之请求调用
  11. 线程wait和notify方法的demo详解
  12. NSData与UIImage之间的转换
  13. python实现抓包_使用Python实现windows下的抓包与解析
  14. 世界标准时间(日期带T)转北京时间
  15. 2021-09-02 linux修改open files数
  16. python中如何输出空格换行_Python将文件中空格变成换行的方法如何做
  17. 双重检查锁单例模式为什么要用volatile关键字?
  18. MinIO入门-02 SpringBoot 整合MinIO并实现文件上传
  19. AI推理服务平台升级,阿里云机器学习PAI推出新规格
  20. 经典龙格-库塔法(四阶龙格-库塔法)求解求一阶常微分方程相应的特解的Python程序

热门文章

  1. 【MM32F5270开发板试用】六、如何用 星辰内核 + 国产RTOS 通过I2S播放 “星辰大海”
  2. 解决虚拟机桥接网络没有 VMnet0 的问题
  3. jquery中的for循环
  4. Day 24 - 设定开发帐号 HBuilder X - DCloud 注册
  5. 关于Halcon::threshold 用时
  6. comsol临时文件夹中有不支持的字符_错误:发生错误。请查看日志文件 C:\Users......
  7. K3工业老单单据的相关表
  8. Oracle sql创建序列sequence
  9. Unity+高通Vuforia SDK——AR
  10. .net中的认证(authentication)与授权(authorization)