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

提问之初

<small>
读取一张图片各种颜色占比
/storage/emulated/0/Pictures/Screenshots/Screenshot_20230725_195440.jpg

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

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%的颜色")

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

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

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

- 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 ...
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值