python遍历文件夹下所有图片_Python--把文件夹下的图片全部拼接成一张大图

输入:

1、几行几列

2、图片路径 (不遍历子文件夹)

import os

import cv2

import numpy as np

import PIL.Image as Image

import matplotlib.pyplot as plt

img_type = ['.jpg','.JPG','.png','.PNG','.bmp','.BMP']#可继续添加图片类型

#输入几行几列

ROW = 4

COL = 5

def resize_blank_img(srcimg, dstpath):

img = cv2.imread(srcimg)

blankimg = np.zeros(np.shape(img), np.uint8)

blankimg[:, :, 0] = 255

blankimg[:, :, 1] = 255

blankimg[:, :, 2] = 255

num = [os.path.join(dstpath,imgpath) for imgpath in os.listdir(dstpath) if os.path.splitext(imgpath)[1] in img_type]

cv2.imwrite(dstpath + "\\" + str(len(num)+1) + ".jpg", blankimg)

def image_compose(image_path):

if not os.path.isdir(image_path):

return -1

imgpath_vec = [os.path.join(image_path,imgpath) for imgpath in os.listdir(image_path) if os.path.splitext(imgpath)[1] in img_type]

#1、使用平均的width,heigth或者可以自定义width,heigth

avg_width = 0

avg_heigth = 0

if avg_width == 0 or avg_heigth == 0:

size = []

for item in imgpath_vec:

size.append((Image.open(item)).size)

sum_width = sum_heigth = 0

for item in size:

sum_width += item[0]

sum_heigth += item[1]

avg_width = int(sum_width/(len(size)))

avg_heigth = int(sum_heigth/(len(size)))

avg_size = (avg_width,avg_heigth)

#2、resize图片大小

vec = [os.path.join(image_path, imgpath) for imgpath in os.listdir(image_path) if

os.path.splitext(imgpath)[1] in img_type]

while (len(vec)) < COL * ROW:

vec = [os.path.join(image_path, imgpath) for imgpath in os.listdir(image_path) if

os.path.splitext(imgpath)[1] in img_type]

resize_blank_img(vec[0],image_path)

imgs = []

for item in vec:

imgs.append((Image.open(item)).resize(avg_size,Image.BILINEAR))

#3、拼接成大图

result_img = Image.new(imgs[0].mode,(avg_width * COL,avg_heigth * ROW))

index = 0

for i in range(COL):

for j in range(ROW):

result_img.paste(imgs[index],(i * avg_width, j * avg_heigth))

index+=1

#4、显示拼接结果

plt.imshow(result_img)

plt.show()

# result_img.save(path)#保存结果

if __name__ == "__main__":

path = r'E:\image_processing_data\png'#输入你的图片路径

image_compose(path)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值