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 @   codeing123  阅读(660)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示