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通道即可

效果图如下:

 

 

posted @ 2023-02-23 16:55  codeing123  阅读(562)  评论(0编辑  收藏  举报