• 读取一张图片各种颜色占比


    提问之初

    
    读取一张图片各种颜色占比
    /storage/emulated/0/Pictures/Screenshots/Screenshot_20230725_195440.jpg
    
    • 1
    • 2
    • 3

    有趣优雅热情沉着的代码与注释/每行每行

    from PIL import Image  # 导入PIL大法,这是处理图像的必备神器
    
    # 图片路径,此处为示例,实际应该根据具体情况修改
    image_path = "/storage/emulated/0/Pictures/Screenshots/Screenshot_20230725_195440.jpg"
    
    # 打开并加载图片
    image = Image.open(image_path)  # 打开图片文件
    pixels = image.load()  # 加载像素数据
    
    # 初始化颜色统计字典,用于存储颜色及其在图片中出现的次数
    color_counts = {}
    
    # 遍历所有像素,并统计颜色出现次数
    for i in range(image.size[0]):  # 循环遍历图片的宽度
        for j in range(image.size[1]):  # 循环遍历图片的高度
            color = pixels[i, j]  # 获取当前像素的颜色
            if isinstance(color, int):
                # 如果当前像素为灰度图像素,则将其转换为RGB格式
                color = (color, color, color)
            if color not in color_counts:  # 如果颜色不在统计字典中,则加入字典并初始化计数为1
                color_counts[color] = 1
            else:  # 否则计数加1
                color_counts[color] += 1
    
    # 计算每种颜色在图片中的比例
    threshold = 0.001  # 声明占比阈值,此值用于控制输出结果中的颜色种类
    total_pixels = image.size[0] * image.size[1]  # 计算总像素数
    color_ratios = {}
    for color, count in color_counts.items():
        color_ratio = count / total_pixels  # 计算颜色在图片中的比例
        if color_ratio >= threshold:  # 如果该颜色的占比超过阈值,则将其加入结果字典
            color_ratios[color] = color_ratio
    
    # 输出结果
    if len(color_ratios) > 0:
        # 对结果字典按照颜色占比从大到小排序,并输出颜色及其占比
        for color, ratio in sorted(color_ratios.items(), key=lambda x: x[1], reverse=True):
            print(f'{color}: {ratio:.2%}')
    else:
        print("图片中不存在占比大于0%的颜色")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    希望这次的代码和注释能够满足您的需求,并且带给您一些乐趣。如果您还有其他问题或需要进一步的帮助,请随时告诉我。

    链接
    长方形
    圆角长方形
    菱形

    以下是这段代码中使用的函数清单:

    - Image.open(image_path): 打开指定路径的图片文件,并返回一个Image对象。
    - image.load(): 返回一个像素访问对象,用于获取和修改图片的像素数据。
    - isinstance(color, int): 检查color是否为整数类型,用于判断像素是否为灰度图像素。
    - color_counts.items(): 返回字典color_counts中包含的所有项。每一项是一个键值对(颜色-次数)。
    - sorted(color_ratios.items(), key=lambda x: x[1], reverse=True): 对颜色比例字典color_ratios进行排序,按照占比从大到小的顺序排列。key参数表示排序的依据,这里使用lambda表达式指定按照比例值(键值对的第二个元素)排序。reverse=True表示降序排列。
    - print(f'{color}: {ratio:.2%}'): 格式化输出颜色及其比例。使用了f-string格式来插入变量colorratio,其中: .2%指定了比例的格式为百分数且保留两位小数。

    打印结果

    在这里插入图片描述

    /data/user/0/org.qpython.qpy/files/bin/qpy thon3.sh "/storage/emulated/0/qpython/读取 一张图片各种颜色占比2.0.1.py" && exit
    张图片各种颜色占比2.0.1.py" && exit      < (27, 27, 37): 53.43%
    (249, 249, 249): 16.25%
    (255, 255, 255): 7.16%
    (27, 27, 39): 2.53%
    (27, 27, 35): 1.61%
    (26, 26, 36): 0.93%
    (28, 26, 37): 0.81%
    (25, 28, 37): 0.75%
    (28, 28, 38): 0.71%
    (25, 27, 39): 0.54%
    (242, 241, 246): 0.53%
    (26, 26, 38): 0.43%
    (28, 26, 39): 0.39%
    (28, 28, 40): 0.33%
    (28, 27, 35): 0.23%
    (25, 27, 40): 0.22%
    (25, 28, 35): 0.22%
    (26, 26, 34): 0.21%
    (27, 26, 40): 0.19%
    (28, 28, 36): 0.18%
    (24, 26, 38): 0.17%
    (24, 27, 36): 0.17%
    (26, 28, 40): 0.16%
    (27, 25, 36): 0.15%
    (26, 29, 38): 0.14%
    (29, 27, 38): 0.13%
    (248, 248, 248): 0.12%
    (26, 28, 41): 0.12%
    (254, 255, 255): 0.11%
    (27, 28, 32): 0.10%
    (25, 25, 35): 0.10%
    
    #[QPython] Press enter to exit ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    【日常折腾】重新安装Windows7,做好ghost备份,迁移主目录,日常软件office,chrome,搜狗输入法,电脑管家,一键ghost进行备份。
    商城小程序项目完整源码(微信小程序)
    利用 Window bat 脚本方便日常开发
    听GPT 讲Rust源代码--src/bootstrap
    antd design 5 版本 文件上传
    【Python从入门到精通】(二十八)五万六千字对Python基础知识做一个了结吧【值得收藏】
    HDFS的JAVA API操作
    【毕业设计】MPU6050姿态解算 姿态估计 - 物联网 单片机 stm32
    【电子通识】USB接口三大类型图册
    MFC随记:AfxBeginThread创建工作线程
  • 原文地址:https://blog.csdn.net/weixin_73675558/article/details/133469113