如何将图片分割为60个均等垂直条带并获取各条带平均Hex颜色?
实现图片分割为60个垂直条带并提取平均十六进制颜色
完全可以实现这个需求,核心逻辑是按宽度均分图片为垂直条带,逐个计算每个条带的RGB颜色平均值,再转换为十六进制格式。下面以Python的Pillow库为例给出具体实现方案:
步骤说明
- 计算每个垂直条带的基础宽度,处理宽度无法被60整除的边界情况
- 逐个截取对应区域的图片条带
- 统计条带内所有像素的RGB总和,计算平均值
- 将RGB平均值转换为标准十六进制颜色码
代码实现
首先安装依赖库:
pip install pillow
然后编写处理脚本:
from PIL import Image def extract_strip_avg_hex(image_path, strip_num=60): # 打开图片并转为RGB模式(兼容带Alpha通道的图片) img = Image.open(image_path).convert("RGB") img_width, img_height = img.size # 计算单条带基础宽度与剩余像素 base_width = img_width // strip_num extra_pixels = img_width % strip_num strip_colors = [] for i in range(strip_num): # 确定当前条带的左右边界 left = i * base_width # 最后一个条带包含所有剩余像素,保证总宽度匹配原图 right = left + base_width + (extra_pixels if i == strip_num - 1 else 0) # 裁剪出当前垂直条带 strip = img.crop((left, 0, right, img_height)) pixels = strip.getdata() # 计算RGB平均值 total_r, total_g, total_b = 0, 0, 0 pixel_count = len(pixels) for r, g, b in pixels: total_r += r total_g += g total_b += b avg_r = total_r // pixel_count avg_g = total_g // pixel_count avg_b = total_b // pixel_count # 转换为十六进制颜色(补零确保两位格式) hex_color = f"#{avg_r:02x}{avg_g:02x}{avg_b:02x}" strip_colors.append(hex_color) return strip_colors # 示例调用(替换为你的图片路径) if __name__ == "__main__": result = extract_strip_avg_hex("rainbow.png") for index, color in enumerate(result, start=1): print(f"第{index}个条带平均颜色: {color}")
细节补充
- 如果需要更精确的平均值,可以将整数除法改为浮点运算后四舍五入(如
avg_r = round(total_r / pixel_count)) - 若处理大尺寸图片,可改用numpy批量计算像素值,提升运行效率
- 可直接传入已打开的Image对象,替代文件路径参数
内容的提问来源于stack exchange,提问作者Dominik Roszkowski
相关产品推荐
相关产品推荐

