1.单个文件夹下对图像进行批量裁剪
from PIL import Image
import os
def update(input_img_path, output_img_path):
image = Image.open(input_img_path)
cropped = image.crop((38, 0, 580, 610))
cropped.save(output_img_path)
dataset_dir = 'XXX'
output_dir = 'XXX'
image_filenames = [(os.path.join(dataset_dir, x), os.path.join(output_dir, x))
for x in os.listdir(dataset_dir)]
for path in image_filenames:
update(path[0], path[1])
2.历遍多个文件夹下对图像进行批量裁剪
from PIL import Image
import os
def update(input_img_path, output_img_path):
image = Image.open(input_img_path)
cropped = image.crop((38, 0, 580, 610))
cropped.save(output_img_path)
output_dir = 'output_folder'
os.makedirs(output_dir, exist_ok=True)
num_folders = 26
folder_format = 'XXX/{}'
for i in range(num_folders):
dataset_dir = folder_format.format(i)
output_subdir = os.path.join(output_dir, os.path.basename(dataset_dir))
os.makedirs(output_subdir, exist_ok=True)
image_filenames = [(os.path.join(dataset_dir, x), os.path.join(output_subdir, x))
for x in os.listdir(dataset_dir)]
for path in image_filenames:
update(path[0], path[1])
3.多个文件下的图像命名按文件名+排序方式命名
import os
def rename(path):
file_list=os.listdir(path)
i=0
for fi in file_list:
old_name=os.path.join(path,fi)
new_name=os.path.join(path,str(i))
os.rename(old_name,new_name)
i+=1
def rename_images_in_folders(root_folder):
folder_list = os.listdir(root_folder)
for folder_name in folder_list:
folder_path = os.path.join(root_folder, folder_name)
if os.path.isdir(folder_path):
image_list = os.listdir(folder_path)
for i, image_name in enumerate(image_list):
if image_name.endswith(('.jpg', '.jpeg', '.png')):
old_image_path = os.path.join(folder_path, image_name)
new_image_name = f"{
folder_name}-{
i}.jpg"
new_image_path = os.path.join(folder_path, new_image_name)
os.rename(old_image_path, new_image_path)
if __name__ == "__main__":
path="./dataset"
rename(path)
root_folder = "./dataset"
rename_images_in_folders(root_folder)
4.多个视频剪切成图像
import cv2
import os
import concurrent.futures
from threading import Lock
video_path = "./dataset/"
pic_path = "./output/"
filelist = os.listdir(video_path)
max_workers = 5
lock = Lock()
def video2pic(filename):
cnt = 0
dnt = 0
output_folder = pic_path + str(filename)
with lock:
if not os.path.exists(output_folder):
os.mkdir(output_folder)
cap = cv2.VideoCapture(video_path + str(filename))
while True:
ret, image = cap.read()
if image is None:
break
w = image.shape[1]
h = image.shape[0]
if (cnt % 5) == 0:
output_file = f"{
output_folder}/{
dnt}.jpg"
cv2.imwrite(output_file, image)
print(output_file)
dnt += 1
cnt += 1
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
if __name__ == '__main__':
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
futures = [executor.submit(video2pic, filename) for filename in filelist]
concurrent.futures.wait(futures)