当前位置: 首页 > web >正文

python如何统计图片的颜色分布

首先,确保你已经安装了必要的库:

pip install pillow numpy matplotlib

然后,使用以下Python代码来统计图片的颜色分布:

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
from collections import Counter
import os# 1. 读取图片
image_path = 'your_image.jpg'  # 替换为你的图片路径
if not os.path.exists(image_path):raise FileNotFoundError(f"图片文件 {image_path} 不存在,请检查文件路径。")image = Image.open(image_path)# 2. 获取像素数据
pixels = np.array(image)# 3. 统计颜色分布(这里以RGB三个通道为例)
# 将像素数组展平,以便统计每个颜色的出现次数
pixels_flat = pixels.reshape(-1, 3)# 使用Counter统计每种颜色的出现次数
color_counts = Counter(map(tuple, pixels_flat))# 4. 处理颜色量化(可选步骤,这里以简单取整为例)
# 定义量化级别,例如将每个通道的值量化为8个级别(0-31, 32-63, ..., 224-255)
quantization_level = 32
quantized_colors = [(r // quantization_level * quantization_level,g // quantization_level * quantization_level,b // quantization_level * quantization_level)for r, g, b in pixels_flat]# 使用Counter统计量化后的颜色分布
quantized_color_counts = Counter(map(tuple, quantized_colors))# 5. 可视化结果(以直方图为例)
# 获取颜色及其对应的计数
colors = list(quantized_color_counts.keys())
counts = list(quantized_color_counts.values())# 为了可视化,我们可以将颜色转换为RGB元组,并归一化计数
# 注意:这里我们使用RGB元组作为颜色,但Matplotlib的bar函数需要颜色名称或十六进制代码,
# 因此我们需要将RGB元组转换为十六进制代码。
hex_colors = ['#%02x%02x%02x' % color for color in colors]# 绘制直方图
plt.figure(figsize=(12, 6))
plt.bar(range(len(counts)), counts, color=hex_colors)
plt.xticks([])  # 隐藏x轴标签,因为颜色已经通过条形颜色表示
plt.xlabel('Colors')
plt.ylabel('Counts')
plt.title('Color Distribution Histogram')
plt.savefig('color_distribution_histogram.png')  # 保存图像到文件,而不是显示它# 打印前10种最常见的颜色及其计数(可选)
print("Top 10 most common colors:")
for color, count in quantized_color_counts.most_common(10):print(f"Color: {color}, Count: {count}")

代码说明:

  1. 读取图片

    • 使用PIL.Image.open函数读取图片文件。
    • 在读取之前,使用os.path.exists检查文件是否存在,以避免程序崩溃。
  2. 获取像素数据

    • 使用numpy.array将图片转换为像素数组。
    • 使用reshape(-1, 3)将像素数组展平,以便逐个访问每个像素的颜色信息。
  3. 统计颜色分布

    • 使用collections.Counter统计每种颜色的出现次数。
    • 颜色以RGB元组的形式表示,例如(255, 0, 0)表示红色。
  4. 处理颜色量化

    • 颜色量化是为了减少计算量并得到更有意义的结果。
    • 在这个示例中,我们将每个通道的值量化为8个级别(0-31, 32-63, …, 224-255)。
    • 你可以根据需要调整quantization_level的值。
  5. 可视化结果

    • 使用matplotlib.pyplot绘制直方图,展示量化后的颜色分布。
    • 颜色条形的高度表示该颜色的出现次数。
    • 颜色条形的颜色与对应的颜色一致。
    • 直方图保存为color_distribution_histogram.png文件。
  6. 打印前10种最常见的颜色及其计数

    • 使用quantized_color_counts.most_common(10)获取前10种最常见的颜色及其计数。
    • 你可以根据需要调整打印的数量。

注意事项:

  • 确保图片文件存在,并提供正确的文件路径。
  • 颜色量化级别可以根据需要调整,以得到更精细或更粗糙的颜色分布。
  • 可视化结果可以保存为文件,以便后续查看和分析。
http://www.xdnf.cn/news/12633.html

相关文章:

  • jenkins gerrit-trigger插件配置
  • JVM 垃圾回收器 详解
  • C++算法训练营 Day11 栈与队列(2)
  • mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
  • 阿里云ACP云计算备考笔记 (4)——企业应用服务
  • 【MySQL】视图、用户管理、MySQL使用C\C++连接
  • 【数据结构初阶】单链表
  • Harmony核心:动态方法修补与.NET游戏Mod开发
  • Java实现飞机射击游戏:从设计到完整源代码
  • 【小红书拥抱开源】小红书开源大规模混合专家模型——dots.llm1
  • 使用WPF的Microsoft.Xaml.Behaviors.Wpf中通用 UI 元素事件
  • 从代码学习深度强化学习 - 初探强化学习 PyTorch版
  • 怎么解决cesium加载模型太黑,程序崩溃,不显示,位置不对模型太大,Cesium加载gltf/glb模型后变暗
  • 开心农场日记之~ 一颗向日葵的成长记录~
  • 基恩士X520 MC通信寄存器转换
  • 如何在软件著作权补正时查看已提交的程序鉴别材料和文档鉴别材料
  • 项目课题——功耗蓝牙(BLE)室内定位系统
  • python queue
  • Python|GIF 解析与构建(5):手搓截屏和帧率控制
  • 摆脱硬件依赖:SkyEye在轨道交通中的仿真应用
  • Python训练day40
  • 33 C 语言字符串转数值函数详解:atoi、atol、atoll、atof
  • D3.js与vue3力导向图开发全流程
  • 【机械视觉】Halcon—【八、形态学调整和生成棋盘格】
  • AI智能编码工具:阿里通义灵码使用个人版
  • 拆钢琴清理,装导电橡胶从电路板背后装好装
  • MySQL 索引优化(Explain执行计划) 详细讲解
  • 8天Python从入门到精通【itheima】-73~74(数据容器“集合”+案例练习)
  • 《前端面试题:JavaScript 变量》
  • 关于DSP数据类型长度的思考