码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 深度学习中图像格式选用jpg还是png?答:png


    目录

    • 1. 参考链接
    • 2. 结论
    • 3. 将jpg转为png的代码(使用PIL库)

    1. 参考链接

    • jpeg 与 png 图片格式的区别
    • png、jpg图片格式的区别及
    • 一个有趣逐步尝试的链接:图像处理:压缩方法对图片大小的影响(cv2 vs PIL)

    2. 结论

    • JPEG,全称Joint Photographic Experts Group,有损压缩格式
      • 图像压缩格式,压缩好的输出文件,后缀是 jpeg 或者 jpg
    • PNG,全称Portable Network Graphic Format,可移植网络图形格式、无损压缩格式
      • 重复保存而不降低图像质量(所以,只要不是需要动画效果的地方强烈建议都采用PNG格式图片)

      • jpeg是有损压缩,png是无损的。正因如此,同一图像质量,png文件的大小,大于jpeg文件。

      • png支持透明效果(alpha),jpeg不支持。

    在这里插入图片描述


    3. 将jpg转为png的代码(使用PIL库)

    1)经评论区提醒,更新了一下代码,现在能实现cv2和PIL两种方式批量转换图像格式,我个人建议还是采用PIL的方式比较好,消除Eixf信息
    2)试了一下,cv2转的图像大小比PIL小,甚至比原始图像小,而且快。但是我还是选择PIL转
    3)比较之下,转换之后的png图像大小都比原本的jpg大,而且cv2转的png比PIL转的大

    批量实现将input_path中的jpg文件转为png保存至out_path中,主要思想是:(同理可实现其他图像格式的互转,可参考博文:通过PIL模块批量对图片格式进行转换(如jpg转png))

    1. 先用PIL.Image.open()读取图像数据,注意要消除Exif信息(代码已实现)
    2. 再使用img.save('xx.png')保存为固定图像格式(如png)
    import os
    import shutil
    import cv2
    from PIL import Image, ImageOps
    
    
    def transform(input_dir, output_dir):
        if not os.path.exists(output_dir):  # 输出文件见不存在则创建
            os.makedirs(output_dir)
    
        for root, dirs, files in os.walk(input_dir):
            for file in files:  # 只对文件进行更改
                filepath = os.path.join(root, file)
                filename, ext = os.path.splitext(file)  # 分割出图像名称、后缀
    
                if ext != '.png':  # 如果后缀不是png,则进行转换
                    newfile = filename + '.png'  # 后缀改为png
                    print('transform ' + file)
    
                    # -------------cv2 更改为PNG的方式------------------------------- #
                    # image = cv2.imread(filepath)
                    # cv2.imwrite(os.path.join(output_dir, newfile), image)
    
                    # -------------PIL更改为PNG的方式 图像大小比cv的低----------------- #
                    image = Image.open(filepath)
                    image = ImageOps.exif_transpose(image)  # 消除相机的exif信息
                    image.save(os.path.join(output_dir, newfile))
                else:  # 直接拷贝过去
                    shutil.copy(filepath, os.path.join(output_dir, file))
    
    
    if __name__ == '__main__':
        input_dir = 'images'  # 目标文件夹
        output_dir = 'images_2'  # 输出文件夹
    
        if not os.path.exists(input_dir):
            print("文件夹不存在!")
        else:
            print("Start to transform!")
            transform(input_dir, output_dir)
            print("Transform end!")
    
  • 相关阅读:
    代码随想录算法训练营第62天|503.下一个更大元素II、42. 接雨水
    深度学习 TensorFlow入门
    Vue2 零基础入门 Vue2 零基础入门第三天 3.1 侦听器
    ASP.NET Core框架探索之Authorization
    TDengine 入门教程⑥——启动 taosAdapter,提供基于6041端口的RESTful 接口,建立REST 连接
    浅谈线程池的拓容、判断、限速技巧
    Linux static_key原理与应用
    分享68个毕业答辩PPT,总有一款适合您
    【MM小贴士】关于SAP系统中关税的处理方式
    Web程序设计-实验05 DOM与BOM编程
  • 原文地址:https://blog.csdn.net/LWD19981223/article/details/126954618
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号