Python OpenCV 批量修改文件夹内所有图片的尺寸

您所在的位置:网站首页 opencv更改图片大小 Python OpenCV 批量修改文件夹内所有图片的尺寸

Python OpenCV 批量修改文件夹内所有图片的尺寸

2024-01-22 01:26| 来源: 网络整理| 查看: 265

Python OpenCV 批量修改文件夹内所有图片的尺寸 简述插件遍历所有文件(包括子文件)缩放图片尺寸并保存图片遍历并修改图片

简述

遍历文件夹下的所有子文件(包括自文件夹内的)的图片批量修改尺寸,并将修改后的图片改为jpg,放入指定文件夹内。 只适用于方图(因为需要处理Unity相关的美术资源)

插件

使用pip安装OpenCV第三方库

pip3 install opencv-python

遍历所有文件(包括子文件)

遍历所有文件(包括子文件)将文件路径传入元组

def show_files(path, all_files): # 首先遍历当前目录所有文件及文件夹 file_list = os.listdir(path) # 准备循环判断每个元素是否是文件夹还是文件,是文件的话,把名称传入list,是文件夹的话,递归 for file in file_list: # 利用os.path.join()方法取得路径全名,并存入cur_path变量,否则每次只能遍历一层目录 cur_path = os.path.join(path, file) # 判断是否是文件夹 if os.path.isdir(cur_path): show_files(cur_path, all_files) else: # 拼接文件路径 all_files.append(path+"/"+file) return all_files 缩放图片尺寸并保存图片

将图片路径和保存路径传入。自动算出缩放比例。

def resize_img(img_path,save_path): # 读取原图片 img = cv2.imread(img_path) h, w = img.shape[0], img.shape[1] print("Original h : " + str(h) + "px Original w : " + str(w) + "px") rate=img_width_height/h img_processing = cv2.resize(img, (0, 0), fx=rate, fy=rate, interpolation=cv2.INTER_NEAREST) # 这里改一下名称,最后三位强制改为jpg if save_path[-3:] == "png": save_path=save_path.replace("png", "jpg") cv2.imwrite(save_path, img_processing) print("Save as : " + save_path) 遍历并修改图片

详细的看注释,写的很明白。

import os import cv2 # 所有需要处理的图片的路径 自动遍历文件夹内所有文件(包括子文件) 填写路径全称 traversal_file="/Users/slowfeather/Documents/PythonProject/ReSizeProject/OImg" # 修改完成后输出的文件夹 output_file="/Users/slowfeather/Documents/PythonProject/ReSizeProject/OutPut" # 变成多少分辨率的方形图 img_width_height=128 def resize_img(img_path,save_path): # 读取原图片 img = cv2.imread(img_path) h, w = img.shape[0], img.shape[1] print("Original h : " + str(h) + "px Original w : " + str(w) + "px") rate=img_width_height/h img_processing = cv2.resize(img, (0, 0), fx=rate, fy=rate, interpolation=cv2.INTER_NEAREST) # 这里改一下名称,最后三位强制改为jpg if save_path[-3:] == "png": save_path=save_path.replace("png", "jpg") cv2.imwrite(save_path, img_processing) print("Save as : " + save_path) def show_files(path, all_files): # 首先遍历当前目录所有文件及文件夹 file_list = os.listdir(path) # 准备循环判断每个元素是否是文件夹还是文件,是文件的话,把名称传入list,是文件夹的话,递归 for file in file_list: # 利用os.path.join()方法取得路径全名,并存入cur_path变量,否则每次只能遍历一层目录 cur_path = os.path.join(path, file) # 判断是否是文件夹 if os.path.isdir(cur_path): show_files(cur_path, all_files) else: # 拼接文件路径 all_files.append(path+"/"+file) return all_files # 首先检测两个路径是否都可访问,如果水印路径没有则创建 if os.path.isdir(traversal_file): print("Check traversal file ok") else: print("Traversal file error") if os.path.isdir(output_file): print("Check water mask file ok") else: print("Water mask file warning,auto create it") os.mkdir(output_file) #首先遍历文件夹,然后对每个文件进行处理 # 传入空的list接收文件名 contents = show_files(traversal_file, []) # 循环打印show_files函数返回的文件名列表 for content in contents: # print(content) # 判断是否为图片 if content.endswith('jpg') or content.endswith('png'): print("processing : "+content) resize_img(content,output_file + "/" +os.path.basename(content))


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3