python resize处理PNG图像缩放 多种参数随机处理 一个文件夹下有许多子文件夹 子文件夹下为PNG图像
import os
import cv2
import sys
import random
input_folder = “F:/resize_test” # 输入文件夹路径
output_folder = “F:/resize_test1” # 输出文件夹路径
def resize_images(input_folder, output_folder):
# 遍历文件夹和子文件夹
count = 0
for root, dirs, files in os.walk(input_folder):
random_number = random.randint(1, 5)
if len(files) != 0:
count +=1
print(count, random_number)
for file_name in files:
# 检查文件扩展名
if file_name.endswith((‘.jpg’, ‘.jpeg’, ‘.png’)):
input_path = os.path.join(root, file_name) # 输入文件路径
output_folder_0 = output_folder + “/” + root[-8:]
output_folder_1 = output_folder_0 + “/” + file_name
# 创建输出文件夹
if not os.path.exists(output_folder_0):
os.makedirs(output_folder_0)
img = cv2.imread(input_path)
width = int(img.shape[1]*0.5)
height = int(img.shape[0]*0.5)
if width%2 == 1 or height%2 == 1:
sys.exit(“宽度或高度为奇数,程序终止”)
# 调用FFmpeg进行图像缩放
# 缩放图像
# # 保存缩放后的图像
if random_number == 1:
# cv2.INTER_NEAREST:最近邻插值法,使用最近的像素值进行插值。
resized_img = cv2.resize(img, (width, height), interpolation=cv2.INTER_NEAREST)
elif random_number == 2:
# cv2.INTER_LINEAR:双线性插值法,使用附近的4个像素值进行插值计算。
resized_img = cv2.resize(img, (width, height), interpolation=cv2.INTER_NEAREST)
elif random_number == 3:
# cv2.INTER_AREA:区域插值法,适用于缩小图像。
resized_img = cv2.resize(img, (width, height), interpolation=cv2.INTER_AREA)
elif random_number == 4:
# cv2.INTER_CUBIC:双立方插值法,使用16个最近的像素值进行插值计算。
resized_img = cv2.resize(img, (width, height), interpolation=cv2.INTER_CUBIC)
else:
# cv2.INTER_LANCZOS4:Lanczos插值法,使用8个最近的像素值进行插值计算。
resized_img = cv2.resize(img, (width, height), interpolation=cv2.INTER_LANCZOS4)
cv2.imwrite(output_folder_1, resized_img)
调用示例
resize_images(input_folder, output_folder)