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
相关产品推荐
相关产品推荐

