基于Python的图片批量切割与合并(保持原像素不变,不会出现像素大小不匹配、填充黑边的问题)
前言
1、本文介绍了基于Python实现的图片切割后按原尺寸合并还原的方法。
2、本文前面详细介绍了各个方法,文末提供了完整代码。
3、本文需要自行填充一些路径,具体请看文末完整代码中的中文信息。
4、本文适配的MacOS解决了目录会自动生成.DS_Store文件的问题。
5、本文的逻辑将会是从切割到复原的全部流程,代码并不会在切割之后停下。
5、本文的逻辑中,存放切割后小图片的目录是作为临时目录,在对下一张图片处理之前将会把此文件夹清空,若需要对小图片做一些操作,可以在文末完整代码对应位置上添加流程。
在一般的图像切割与合并博文中,基本都不会考虑固定尺寸切割最后会导致尺寸损失或尺寸变大,体现就是图片的像素变少了,或者加上了没必要的多余像素。
本文在基于网络上的一些切割合并图像文章之后,实现了对一个目录内所有的图像进行切割、合并的操作,并且能保持像素数量与原图尺寸,不会出现图像尺寸的变化。
效果图

1、批量读取文件
调用os,读取目录下的所有文件,同时排除了MacOS系统自动生成的.DS_Store文件。
# 加载图片列表
def round_read_file(file_path):
image_name_list = []
for file_name in os.listdir(file_path):
# 排除MacOS的.DS_Store文件,Windows下不受影响。
if file_name != '.DS_Store':
print("加载图片:"+str(file_path)+str(file_name))
image_name_list.append(str(file_name))
print("总计加载图片数量" + str(len(image_name_list)))
return image_name_list
2、清空目标目录方法(配合切割图片方法使用)
# 清空TEMP
# dir_path:需要清空的目录路径
def del_files(dir_path):
# os.walk会得到dir_path下各个后代文件夹和其中的文件的三元组列表,顺序自内而外排列,
for root, dirs, files in os.walk(dir_path, topdown=False):
# 第一步:删除文件
for name in files:
os.remove(os.path.join(root, name)) # 删除文件
# 第二步:删除空文件夹
for name in dirs:
os.rmdir(os.path.join(root, name)) # 删除一个空目录
print("clear done!!")
3、批量切割图片(像素不足自动补全)
# 切割
# orgPath:加载图片所在路径
def qg(orgPath):
del_files("切割后的小图片要保存在的目录/")
global static_cols
global static_rows
# 目标分割大小
DES_HEIGHT = 1500
DES_WIDTH = 1500
# 获取图像信息
path_img = orgPath
# 获取原始高分辨的图像的属性信息
src = cv2.imread(path_img)
height = src.shape[0]
width = src.shape[1]
# 把原始图像边缘填充至分割大小的整数倍
padding_height = math.ceil(height / DES_HEIGHT) * DES_HEIGHT
padding_width = math.ceil(width / DES_WIDTH) * DES_WIDTH
# 将padding图像与原始图像进行融合,使得原始
padding_img = np.random.randint(0, 255, size=(padding_height, padding_width, 3)).astype(np.uint8)
padding_img[0:height + 0, 0:width + 0] = src
img = padding_img # 读取彩色图像,图像的透明度(alpha通道)被忽略,默认参数;灰度图像;读取原始图像,包括alpha通道;可以用1,0,-1来表示
sum_rows = img.shape[0] # 高度
sum_cols = img.shape[1] # 宽度
cols = DES_WIDTH
rows = DES_HEIGHT
save_path = "切割后的小图片要保存在的目录/".format(cols, rows) # 切割后的照片的存储路径
static_rows = int(sum_rows / rows)
static_cols = int(sum_cols / cols)
filename = os.path.split(path

介绍了一种使用Python进行图片批量切割及合并的方法,确保切割后图片可以按原尺寸精确还原,避免像素损失或增加不必要的像素。
最低0.47元/天 解锁文章
3433

被折叠的 条评论
为什么被折叠?



