前面已经做了纹理复杂度分析,这次继续沿着 Sobel 梯度往下做一个更直观的小工具:
梯度方向分析。
它主要回答一个问题:
图片中的强梯度,主要集中在哪些方向?
这次我用华为云码道辅助开发了一个基于 OpenCV Sobel + atan2 的 Gradient Direction Analyzer,可以统计水平、垂直和斜向梯度的占比,并生成方向可视化图。
1. 这次工具做什么?
主要功能包括:
- 上传 JPG / PNG 图片
- 自动转换灰度图
- 使用 Sobel 计算 Gx、Gy
- 计算梯度幅值
- 计算梯度方向
- 统计 Horizontal / Vertical / Diagonal
- 判断 Dominant Direction
- 生成 Gradient Direction Map
- 显示方向占比
- 支持下载结果图
整体流程:
图片
→ 灰度化
→ Sobel X / Y
→ 梯度幅值
→ 梯度方向
→ 方向分类
→ 统计占比

2. 梯度方向怎么计算?
首先计算两个方向的 Sobel 梯度:
gx = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=3)gy = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=3)
然后通过:
angle = np.degrees(np.arctan2(gy, gx))angle = (angle + 180) % 180
把方向统一到:
0°~180°
范围内。
这样每个像素都会得到一个对应的梯度方向。
3. 为什么只分析强梯度?
如果所有像素都参与统计,天空、湖面等几乎没有变化的区域也会产生一些很小的梯度值。
所以这次只统计:
Gradient Magnitude > 50
的像素。
页面本次共检测到:
426,507 个 Active Pixels
这些像素才进入后面的方向统计。
这样结果更能反映画面中的明显结构。
4. 三种方向怎么划分?
为了让结果简单直观,这次把方向分为三类:
- Horizontal:接近 0° / 180°
- Vertical:接近 90°
- Diagonal:其余斜向角度
最后分别统计三类强梯度像素占全部 Active Pixels 的比例。
哪一类占比最高,就作为:
Dominant Direction
5. 真实测试结果
这次继续使用之前的狗狗公园图片。
图片尺寸:
1650 × 953
最终结果:
- Horizontal:35.49%
- Vertical:17.81%
- Diagonal:46.70%
- Active Pixels:426,507
- Dominant Direction:Diagonal

因为:
46.70% > 35.49% > 17.81%
所以最终判断:
Diagonal
6. 为什么 Diagonal 占比最高?
这张测试图片中有大量不规则细节,例如:
狗狗毛发
草地
树叶
身体轮廓
远处建筑和植物
这些结构并不是全部严格水平或垂直排列。
特别是:
毛发、草叶、树枝
会形成很多斜向边缘。
所以最终:
Diagonal = 46.70%
成为占比最高的一类。
7. Gradient Direction Map 能看到什么?
页面右侧生成了:
Gradient Direction Map

可以看到狗狗轮廓、毛发、草地和树叶区域出现了大量不同颜色的线条。
这些颜色用来区分不同梯度方向。
黑色区域则代表:
梯度较弱
或者没有进入强梯度统计范围。
相比只看百分比,这张方向图能更直观地观察:
图片中的方向信息到底分布在哪里。
8. 梯度方向不等于物体方向
这里有一个容易误解的地方。
页面判断:
Dominant Direction = Diagonal
并不是说:
狗狗是斜着的。
也不是说:
整张图片里的物体都朝斜方向。
它统计的是:
像素灰度变化的方向。
而且梯度方向通常和我们看到的边缘方向:
互相垂直。
所以它更适合描述图像结构,而不是语义上的物体朝向。
9. 这个指标有什么用途?
虽然算法很简单,但可以用于一些基础图像分析。
例如:
分析建筑图片中水平和垂直结构是否明显。
比较不同纹理图片的方向分布。
观察道路、文字、纹理等图像中的主要结构方向。
也可以和上一篇的:
Texture Score
配合使用。
上一篇回答:
图片中的结构多不多?
这一篇进一步回答:
这些结构主要朝哪个方向?
10. 总结
这次用华为云码道辅助开发了一个:
OpenCV 梯度方向分析工具。
核心算法:
Sobel X
- Sobel Y
- Gradient Magnitude
atan2()- Direction Classification
真实测试结果:
- Horizontal:35.49%
- Vertical:17.81%
- Diagonal:46.70%
- Active Pixels:426,507
- Dominant Direction:Diagonal
通过 Direction Map 也能看到,狗狗毛发、草地、树叶等区域包含大量复杂方向结构,因此最终斜向梯度占比最高。
这一篇主要回答:
图片中的强梯度主要分布在哪些方向?
下一篇可以换一个更直观的玩法:
图片是什么色调?用华为云码道开发 OpenCV HSV 色调分布分析工具
直接分析 Hue 分布,统计红、黄、绿、青、蓝、紫等颜色区域占比。