You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python多颜色像素计数:支持非精确颜色范围匹配需求

多颜色范围匹配的像素统计方案

很棒的问题!要实现支持多颜色区间匹配的像素统计,咱们可以通过定义颜色范围字典、遍历像素时判断归属区间的方式来实现。下面是修改后的代码,同时我会拆解关键改动:

from PIL import Image

def count_color_ranges(image_path, color_ranges):
    # 打开图片并转换为RGB模式(自动忽略Alpha通道,若需要保留可改用RGBA)
    im = Image.open(image_path).convert("RGB")
    pixel_counts = {color: 0 for color in color_ranges.keys()}
    pixel_counts["其他颜色"] = 0  # 统计未匹配到的像素

    for pixel in im.getdata():
        matched = False
        # 遍历每个颜色区间,判断像素是否在范围内
        for color_name, (lower, upper) in color_ranges.items():
            # 检查RGB三个通道是否都在对应区间内
            if all(lower[i] <= pixel[i] <= upper[i] for i in range(3)):
                pixel_counts[color_name] += 1
                matched = True
                break  # 匹配到一个区间后就不用再检查其他的了
        if not matched:
            pixel_counts["其他颜色"] += 1

    return pixel_counts

# 定义你需要统计的颜色区间:键是颜色名称,值是(下限RGB, 上限RGB)
color_ranges = {
    "黑色": ((0, 0, 0), (40, 40, 40)),
    "红色": ((180, 0, 0), (255, 60, 60)),
    "蓝色": ((0, 0, 180), (60, 60, 255)),
    "灰色": ((100, 100, 100), (160, 160, 160))
}

# 调用函数并打印结果
result = count_color_ranges("oh.png", color_ranges)
for color, count in result.items():
    print(f"{color}像素数量: {count}")

关键改动说明

  • 颜色区间定义:用字典color_ranges来存储需要统计的颜色,每个颜色对应一个包含下限和上限RGB元组的集合,这样你可以轻松添加/修改任意颜色的范围,非常灵活。
  • 区间匹配逻辑:通过all(lower[i] <= pixel[i] <= upper[i] for i in range(3))来判断像素的RGB三个通道是否都落在对应区间内,实现非精确的范围匹配。
  • 灵活的统计存储:用字典pixel_counts来存储每个颜色的计数,新增颜色时不需要修改统计逻辑,只需要更新color_ranges即可。
  • Alpha通道处理:代码里用convert("RGB")自动忽略了图片的Alpha通道,如果你的图片需要考虑透明度(比如RGBA模式),可以把convert("RGB")改成convert("RGBA"),然后在区间匹配时加上第4个通道的判断(比如range(4))。
  • 未匹配颜色统计:新增了“其他颜色”的统计,避免遗漏不在定义范围内的像素。

如果你需要调整颜色区间的精度,或者添加更多颜色,直接修改color_ranges字典就可以啦,非常方便!

内容的提问来源于stack exchange,提问作者MiniMiloe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:00:27