opencv-python 批量更改图像分辨率并且保留图像原有的透明度
opencv-python环境安装:https://www.cnblogs.com/technicist/p/17138657.html
案例代码(批量压缩图像分辨率为原来的一半,例如2400*1398 可压缩至1200*699):
注意:处理后的图像会保存到原来的目录下(替换掉原来的图像)
import cv2 import os import sys# PATH = r'/root/autodl-tmp/MySwin-Unet/data/' # 这个路径只需写到train和val文件夹即可。文件夹下的图片程序会自动帮你打开 PATH = r'D:\ProgramFiles\libwebp\libwebp-1.2.1-windows-x64\bin\png\Help_3840_1080\mipmap-ldrtl-hdpi' def resizeImage(file,NoResize): # image = cv2.imread(file, cv2.IMREAD_COLOR) image = cv2.imread(file, cv2.IMREAD_UNCHANGED) #读入完整图片,包括alpha通道 # 如果type(image) == 'NoneType',会报错,导致程序中断,所以这里先跳过这些图片, # 并记录下来,结束程序后手动修改(删除) if image is None: NoResize += [str(file)] else: width = int(image.shape[1]/2) height = int(image.shape[0]/2) print("宽度:"+str(width)) print("高度:"+str(height)) resizeImg = cv2.resize(image, (width, height)) # 这里改为自己想要的分辨率 cv2.imwrite(file, resizeImg) cv2.waitKey(100) if __name__ == "__main__": NoResize = [] # 记录没被修改的图片 total = 0 for childPATH in os.listdir(PATH): # 子文件路径 childPATH = PATH + '\\' + str(childPATH) print(childPATH) total+=1 resizeImage(childPATH,NoResize) print("总数量:" + str(total)) print('------修改图片大小全部完成❥(^_-)')
效果:
(1)原图像的分辨率:
(2)处理后的分辨率:
(3)批量压缩:
坑1:压缩出来的图像,透明度全为1,导致图标不清晰,效果图如下:
问题分析:首次读取图像时,只读取了3个通道(R、G、B),漏读了透明度通道;设置读取4通道R、G、B + alpha通道即可
效果图如下: