最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

opencv-python 批量更改图像分辨率并且保留图像原有的透明度

来源:博客园


【资料图】

opencv-python环境安装:https://www.cnblogs.com/technicist/p/17138657.html

案例代码(批量压缩图像分辨率为原来的一半,例如2400*1398 可压缩至1200*699):

注意:处理后的图像会保存到原来的目录下(替换掉原来的图像)

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

效果图如下:

关键词: 问题分析 程序中断