前面已经做过主色提取、色彩偏移、色温分析,这次换一个更直观的颜色分析方式:
统计整张图片中不同 Hue 色调分别占多少。
这次我用华为云码道辅助开发了一个基于 OpenCV HSV 色彩空间的 Hue Distribution Analyzer,可以统计红、黄、绿、青、蓝、紫六类色调,并自动判断图片的 Dominant Hue。
1. 这次工具做什么?
主要功能包括:
- 上传 JPG / PNG 图片
- BGR 转 HSV
- 过滤低饱和度像素
- 统计六种 Hue 色调
- 计算每种颜色占比
- 判断 Dominant Hue
- 生成 Hue Map
- 显示颜色分布柱状图
- 支持下载结果图
整体流程:
图片
→ HSV
→ Saturation 过滤
→ Hue 分类
→ 统计比例
→ Dominant Hue

2. 为什么使用 HSV?
普通 RGB 更适合表示:
红、绿、蓝三个通道的强度。
而 HSV 把颜色拆成:
- H:Hue,色调
- S:Saturation,饱和度
- V:Value,亮度
这次我们主要关注:
H,也就是"这是什么颜色"。
核心转换:
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)h = hsv[:, :, 0]s = hsv[:, :, 1]
OpenCV 中 Hue 的范围不是 0~360,而是:
0~179
3. 为什么要过滤低饱和度像素?
白色、灰色、黑色这些区域,其实没有明显 Hue。
如果全部参与统计,很容易干扰结果。
所以这次只保留:
valid = s > 40
也就是:
Saturation > 40
的像素。
本次测试一共得到:
1,426,504 个 Valid Color Pixels
这些像素才会参与后续颜色统计。
4. 六种颜色怎么划分?
这次把 Hue 简单划分为:
- Red:0~10、170~179
- Yellow:11~35
- Green:36~85
- Cyan:86~100
- Blue:101~135
- Purple:136~169
然后分别计算:
颜色占比 = 当前颜色像素数 / 有效彩色像素数 × 100%
占比最高的一类,就是:
Dominant Hue
5. 真实测试结果
这次继续使用狗狗公园图片进行测试。
图片尺寸:
1650 × 953
最终得到:
- Red:1.32%
- Yellow:51.44%
- Green:19.35%
- Cyan:1.35%
- Blue:26.40%
- Purple:0.13%
最终:
Dominant Hue = Yellow
因为:
51.44% > 26.40% > 19.35%
黄色明显占据第一位。
6. 为什么 Yellow 会占 51.44%?
从原图也能看出来,狗狗本身有大量:
金黄色
浅黄色
棕黄色
的毛发。
同时草地、阳光照射区域中,也有不少像素会落入 Yellow 的 Hue 区间。
所以最终:
Yellow = 51.44%
成为最主要的色调。
这和肉眼看到的画面整体暖黄色感觉也是一致的。
7. Blue 为什么也有 26.40%?
图片中还有面积比较大的:
天空
湖面
这些区域主要贡献蓝色像素。
所以 Blue 最终达到:
26.40%
是第二大色调。
Green 则主要来自:
草地
树叶
远处植物
最终占:
19.35%
这三个颜色基本构成了整张图片的主要色调结构。
8. Hue Map 能看到什么?
页面右侧生成了:
Hue Map

可以非常直观地看到:
狗狗主体大量显示为黄色,天空显示为蓝色,植物区域则出现绿色。
而黑色区域主要代表:
没有参与 Hue 统计的低饱和度像素。
所以 Hue Map 相当于把原图中的颜色重新映射成:
六个固定颜色类别。
9. 它和主色提取有什么区别?
前面做过一个:
K-Means 主色提取工具
两者看起来都在分析颜色,但方法不一样。
主色提取:
从图片中自动聚类出几种代表颜色。
例如:
#A1C8F0
#B2A564
这类具体 RGB 颜色。
而这次 Hue Distribution:
提前定义红、黄、绿、青、蓝、紫六个类别,再统计各自比例。
所以一个更适合找:
代表颜色
另一个更适合看:
色调组成。
10. 总结
这次用华为云码道辅助开发了一个:
OpenCV HSV 色调分布分析工具。
核心流程:
BGR
→ HSV
→ Saturation Filter
→ Hue Classification
→ Ratio
→ Dominant Hue
本次真实测试结果:
- Valid Color Pixels:1,426,504
- Red:1.32%
- Yellow:51.44%
- Green:19.35%
- Cyan:1.35%
- Blue:26.40%
- Purple:0.13%
- Dominant Hue:Yellow
从 Hue Map 也可以直观看到,狗狗和部分草地区域贡献了大量黄色,而天空和湖面则贡献了比较明显的蓝色。
这一篇回答的就是:
一张图片到底主要由哪些色调组成?
下一篇可以继续做一个更偏图像处理的方向:
图片亮度不均怎么办?用华为云码道开发 OpenCV CLAHE 局部对比度增强工具
这样可以从"分析类工具"切换到"图像增强类工具",内容会更有变化。