py 图片拆分
from PIL import Image import os def split_chars_and_numbers(image_path, output_dirsplit_all_chars, split_lettersTrue, split_numbersTrue): 一体化切分图片中的字母(A-Z)和数字(1-90) :param image_path: 输入图片路径 :param output_dir: 输出根文件夹 :param split_letters: 是否切分字母默认True :param split_numbers: 是否切分数字默认True # 创建根输出文件夹 os.makedirs(output_dir, exist_okTrue) # 分别创建字母/数字子文件夹 letters_dir os.path.join(output_dir, letters) numbers_dir os.path.join(output_dir, numbers) if split_letters: os.makedirs(letters_dir, exist_okTrue) if split_numbers: os.makedirs(numbers_dir, exist_okTrue) # 打开图片并获取尺寸 img Image.open(image_path) img_width, img_height img.size print(f图片原始尺寸: {img_width}x{img_height}) # 1. 切分字母A-Z if split_letters: print(\n开始切分字母...) # 裁剪边缘空白减少干扰 crop_margin 20 cropped_img img.crop(( crop_margin, crop_margin, img_width - crop_margin, img_height - crop_margin )) crop_w, crop_h cropped_img.size # 字母行配置每行字符数字符列表 letter_row_configs [ (7, [A, B, C, D, E, F, G]), # 第1行 (7, [H, I, J, K, L, M, N]), # 第2行 (6, [O, P, Q, R, S, T]), # 第3行无第7个字符 (6, [U, V, W, X, Y, Z]), # 第4行无第7个字符 ] # 计算字母区域总高度前4行 letter_total_height int(crop_h * 0.75) # 字母占图片75%高度 row_height letter_total_height // len(letter_row_configs) # 逐行切分字母 for row_idx, (char_count, char_list) in enumerate(letter_row_configs): y_start row_idx * row_height y_end (row_idx 1) * row_height char_width crop_w // char_count for col_idx, char in enumerate(char_list): x_start col_idx * char_width x_end (col_idx 1) * char_width # 裁剪并保存字母 char_box (x_start, y_start, x_end, y_end) char_img cropped_img.crop(char_box) save_path os.path.join(letters_dir, fletter_{char}.png) char_img.save(save_path) print(f 已保存字母 {char} → {save_path}) # 2. 切分数字1-90 if split_numbers: print(\n开始切分数字...) # 精准定位数字行区域比例适配易微调 number_row_box ( int(img_width * 0.05), # 数字行左侧 int(img_height * 0.8), # 数字行顶部 int(img_width * 0.95), # 数字行右侧 int(img_height * 0.95) # 数字行底部 ) # 裁剪数字行 number_row_img img.crop(number_row_box) num_w, num_h number_row_img.size # 数字列表和宽度 numbers [1,2,3,4,5,6,7,8,9,0] single_num_width num_w // len(numbers) # 逐一切分数字 for idx, num in enumerate(numbers): x_start idx * single_num_width x_end (idx 1) * single_num_width num_box (x_start, 0, x_end, num_h) num_img number_row_img.crop(num_box) save_path os.path.join(numbers_dir, fnumber_{num}.png) num_img.save(save_path) print(f 已保存数字 {num} → {save_path}) print(f\n✅ 切分完成所有文件已保存到 {output_dir} 文件夹) # 执行入口可灵活配置 if __name__ __main__: # 替换为你的图片路径本地路径/网络URL都支持 IMAGE_PATH /Users/mac/Downloads/75818f57-3658-49cf-a5e4-834a12556d50.jpeg # 本地图片示例 # IMAGE_PATH f3c81798185c404c87fa1dccfdaa4d50.jpeg # 配置切分选项按需修改 SPLIT_LETTERS True # 切分字母True/False SPLIT_NUMBERS True # 切分数字True/False # 执行切分 split_chars_and_numbers( image_pathIMAGE_PATH, split_lettersSPLIT_LETTERS, split_numbersSPLIT_NUMBERS )结果
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2424843.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!