基于python将多个文件夹下的图片放到同一个文件夹下面

前言

我相信很多同学看到我这个题目都很懵逼啊,心里面想的肯定是:嗯???我直接在win下面复制粘贴不就完事了吗???
我不采用这种方式有两个原因
第一个是我就很想用python,感觉单纯复制粘贴不能完全解决问题,万一图片超级多呢。
其次,就是不用文件夹下面的图片名字都一样,例如第一个文件夹下面有一个’1.png’,第二个文件夹下面也有一个一样名字的文件,所以复制粘贴的时候就会被替换掉。
因此我选择用python来解决这个问题。

参考

本文感谢以下参考部分:
np.concatenate() 使用说明

思路

思路如下:

  1. 读取每一个文件夹下面的图片,并将其转变为np.array的形式
  2. 将这些np.array合并成一个大的array
  3. 以opencv的方式将大array里面的数值按图片的形式保存

代码

需要用到的包

import glob
import cv2
import numpy as np

定义路径

combine_path = [ 'path1/*',
                			'path2/*',
                			'path3/*',
                			'path4/*',
                			'path5/*']

result_path = 'result_path'

没有别的要强调的,注意一下combine_path里面,图片下面有图片的话后面加个/*就好了

打开文件下的图片

def open_image(path1):
    img_path = glob.glob(path1)
    return np.array([cv2.imread(true_path) for true_path in img_path])

array的结合

def matrix_combine(np_list):
    length = len(np_list)
    for i in range(1,length):
        if i == 1:
            result = np.concatenate([np_list[i-1],np_list[1]],axis=0)
        else:
            result = np.concatenate([result,np_list[i]],axis=0)

    return result

这里需要强调的部分就是,我的axis设置为0,这里我的shape长这样:[n,h,w,c]其中,n是图片数量,h和w是图片宽和高,c是图片通道,我结合的目的是为了让图片结合,所以选择的axis=0,用的时候可能就这里需要注意一下吧

主函数

sum = len(combine_path)
name = []
for i in range(sum):
    name.append(open_image(combine_path[i]))

res = matrix_combine(name)

for i, img in enumerate(res):
    cv2.imwrite(result_path+str(i)+'.bmp',img)

这里我保存图片,重新命名了一遍,命名出来的效果是’1.bmp’这种的

完整代码方便复制粘贴

import glob
import cv2
import numpy as np

combine_path = [ 'path1/*',
                			'path2/*',
                			'path3/*',
                			'path4/*',
                			'path5/*']

result_path = 'result_path'

def open_image(path1):
    img_path = glob.glob(path1)
    return np.array([cv2.imread(true_path) for true_path in img_path])

def matrix_combine(np_list):
    length = len(np_list)
    for i in range(1,length):
        if i == 1:
            result = np.concatenate([np_list[i-1],np_list[1]],axis=0)
        else:
            result = np.concatenate([result,np_list[i]],axis=0)

    return result

sum = len(combine_path)
name = []
for i in range(sum):
    name.append(open_image(combine_path[i]))

res = matrix_combine(name)

for i, img in enumerate(res):
    cv2.imwrite(result_path+str(i)+'.bmp',img)

总结

感谢阿果同学,网管同学

防火防盗防诈骗

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值