赞
踩
使用方法:文件名CropSingleArea.py
帮助文档:python3 CropSingleArea.py -h
使用方法:python3 CropSingleArea.py -i 输入文件夹目录 -c 图片后缀名 -o 输出文件夹 -n 线程数
注:-c不输入默认为jpg。-o不输入默认为./crop_result。-n不输入默认使用6个线程
crop = img[510:1150, 4260:4900] # 裁剪坐标为[y0:y1, x0:x1],此处为裁剪区域的坐标。需要到代码中更改,坐标顺序[y0:y1, x0:x1]
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : haijiao # @File : CropSingleArea.py # @Data : 2022/6/8 9:44:14 import os import sys import cv2 import glob import time import argparse from tqdm import tqdm from pathlib import Path from pathos.multiprocessing import ProcessingPool as Pool class CropSingleArea: def __init__(self, input_path, image_class, out_path, num_processes): """ 用于裁剪文件夹内的图片另存到其他文件夹,裁剪区域在cropimg函数内设置 Args: input_path: 输入图片的目录 image_class: 裁剪图片的文件类型,默认jpg out_path: 输出文件的目录,默认./crop_result num_processes: 处理图片的cpu进程数,默认6 """ self.input_path = input_path self.image_class = image_class self.out_path = out_path self.num_processes = num_processes def path_list(self): """ 用于生成目录下所有图片文件的路径列表 Returns:目录列表 """ Path(self.out_path).mkdir(parents=True, exist_ok=True) image_class = "*." + self.image_class self.input_list = glob.glob(os.path.join(self.input_path, image_class)) def cropimg(self, file_name): """ 裁剪图片 Args: file_name: 输入图片 Returns:输出图片 """ # t_start = time.time() img = cv2.imread(file_name) if img is None: sys.exit("Could not read the image.") crop = img[510:1150, 4260:4900] # 裁剪坐标为[y0:y1, x0:x1] crop_name = os.path.splitext(os.path.basename(file_name))[0] + os.path.splitext(file_name)[1] crop_path = os.path.join(self.out_path, crop_name) cv2.imwrite(crop_path, crop) # self.t_run = time.time() - t_start def imap_unordered_bar(self, func): """ 用于多线程处理文件列表内的文件 Args: func: 处理文件的函数 Returns:null """ p = Pool(self.num_processes) # res_list = [] with tqdm(total=len(self.input_list)) as pbar: t_start = time.time() # for i, res in enumerate(p.imap_unordered(func, self.input_list)): for i, res in enumerate(p.imap(func, self.input_list)): t_run = time.time() - t_start pbar.set_description(f"{os.path.basename(self.input_list[i])}画图完成,共耗时{t_run}秒 ") pbar.update() # res_list.append(res) # pbar.close() p.close() p.join() # return res_list if __name__ == '__main__': parser = argparse.ArgumentParser(description="这是一个用来裁剪文件夹中所有图片的程序") parser.add_argument("-i", "--input", required=True, help='输入图片所在的路径,这是必须的参数') parser.add_argument("-c", "--img_class", type=str, default='jpg', help="输入图片的后缀名,默认参数为jpg") parser.add_argument("-o", "--out_path", type=str, default='./crop_result', help="输出有效图片的路径,默认为./crop_result") parser.add_argument("-n", "--num_processes", type=int, default=6, help="处理用到的多线程数量,默认值为6") args = parser.parse_args() CropSingleArea = CropSingleArea(args.input, args.img_class, args.out_path, args.num_processes) CropSingleArea.path_list() CropSingleArea.imap_unordered_bar(CropSingleArea.cropimg)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。