图片里的阴影能不能减弱?用华为云码道开发 OpenCV 光照校正工具

前面已经做过 Gamma、CLAHE、直方图均衡化,这次继续处理另一个常见问题:

图片光照不均。

有些图片整体亮度正常,但局部区域明显偏亮或偏暗。相比单纯提高亮度,这次我用华为云码道辅助开发了一个基于 OpenCV 的 Illumination Correction 光照校正工具,先估计低频光照分布,再对亮度通道进行归一化。


1. 这次工具做什么?

主要功能包括:

  • 上传 JPG / PNG 图片
  • 转换到 LAB 色彩空间
  • 使用 Gaussian Blur 估计 Illumination Map
  • 调节 Blur Kernel Size
  • 调节 Correction Strength
  • 显示原图、光照图和校正结果
  • 统计平均亮度
  • 统计 Brightness Std
  • 支持下载 Illumination Map 和结果图

整体流程:

图片

→ LAB

→ L Channel

→ Gaussian Blur

→ Illumination Map

→ Brightness Normalization

→ Corrected Image


2. 什么是 Illumination Map?

一张图片中的亮度可以粗略理解成两部分:

场景本身的细节 + 缓慢变化的光照。

比如阴影、太阳照射、渐变亮度通常属于比较低频的变化。

所以这次使用一个较大的 Gaussian Blur:

复制代码
illumination = cv2.GaussianBlur(    l,    (51, 51),    0)

把毛发、草地这些细节模糊掉,只保留整体亮暗趋势。

得到的就是:

Illumination Map。


3. 为什么使用 LAB?

这次先把图片转换为:

复制代码
lab = cv2.cvtColor(    image,    cv2.COLOR_BGR2LAB)

然后拆分:

复制代码
l, a, b = cv2.split(lab)

其中:

  • L:亮度
  • A / B:颜色信息

我们只对:

L Channel

进行光照校正。

这样可以尽量保留原图的颜色信息,而不是直接修改三个 BGR 通道。


4. 光照校正怎么实现?

核心思路是:

用原始亮度除以估计出的光照分布,再恢复到合适的平均亮度。

可以简化为:

复制代码
corrected_l = (    l_f / illumination_f) * mean_light

如果某个区域因为光照原因特别亮,除以较大的 illumination 后会被压低。

如果某个区域偏暗,则会得到一定补偿。

最后再把结果限制到:

复制代码
0~255

范围内。


5. 这次使用了什么参数?

本次实际参数:

  • Blur Kernel Size:51 × 51
  • Correction Strength:1.00
  • 图片尺寸:1650 × 953

51 × 51 属于比较大的模糊核,主要用于提取缓慢变化的低频亮度信息,而不是图像中的细小纹理。


6. 真实测试结果

这次继续使用狗狗公园图片。

处理前:

  • Mean Brightness:163.38
  • Brightness Std:47.82

处理后:

  • Mean Brightness:161.30
  • Brightness Std:24.11

可以看到平均亮度基本没有发生特别大的变化,但亮度标准差明显降低。


7. Brightness Std 为什么值得看?

Brightness Std 可以简单表示:

整张图片亮度分布有多分散。

数值越大:

不同区域之间的亮暗差异通常越明显。

这次:

复制代码
47.82 → 24.11

下降:

23.71

相对减少约:

49.6%

说明经过校正以后,整张图片的亮度分布变得明显更加均匀。

这比单纯观察平均亮度更能反映:

光照不均有没有被减弱。


8. 为什么平均亮度变化很小?

原始平均亮度:

163.38

校正后:

161.30

只下降:

2.08

说明这次算法并不是简单:

"把整张图片变亮"或者"把整张图片变暗"。

它主要做的是:

压低局部过亮区域,同时适当补偿偏暗区域。

所以整体平均值变化不大,而亮度波动明显降低。

这正是光照归一化和 Gamma 调整的区别。


9. 校正也可能过头

从结果图也能看到,经过较强光照归一化以后:

狗狗毛发

草地

树叶

的局部亮暗变化被明显压平。

部分区域会产生比较强的视觉处理感。

因此:

Brightness Std 越低并不代表图片一定越好看。

如果 Blur Kernel 或 Correction Strength 设置不合适,还可能出现:

  • 局部细节变平
  • 边缘不自然
  • 光晕
  • 画面失去原本层次

所以页面里也注明:

Normalization cannot recreate missing information.

如果暗部本身已经完全没有细节,光照校正也无法凭空恢复。


10. 总结

这次用华为云码道辅助开发了一个:

OpenCV 光照不均校正工具。

核心流程:

LAB

→ L Channel

→ Large Gaussian Blur

→ Illumination Map

→ Brightness Normalization

→ Corrected Image

本次真实结果:

  • Blur Kernel:51 × 51
  • Correction Strength:1.00
  • Original Brightness Std:47.82
  • Corrected Brightness Std:24.11
  • Brightness Std 下降约:49.6%
  • Original Mean Brightness:163.38
  • Corrected Mean Brightness:161.30

结果说明,在平均亮度基本保持稳定的情况下,图片中的低频亮度差异被明显压缩,整体光照分布更加均匀。

这一篇和前面的增强工具区别也比较明显:

Gamma:调整整体亮度曲线

CLAHE:增强局部对比度

Illumination Correction:减弱低频光照不均

下一篇可以继续换一个完全不同的方向:

图片里的重复纹理怎么分析?用华为云码道开发 OpenCV Gabor 滤波纹理工具

相关推荐
ck0135791 小时前
AI 图片放大原理与实践:2 倍、4 倍放大有什么区别?
图像处理·人工智能·深度学习·计算机视觉
小沈同学呀1 小时前
【Agent开发第十三期】多模型路由:给 Agent 装一个“调度台“,实测省 86% 成本
人工智能·agent开发·多模型路由
熊猫钓鱼>_>1 小时前
Kotlin Multiplatform for OpenHarmony 实战:kotlinx-serialization JSON 适配
开发语言·华为·kotlin·华为云·json·harmonyos·code
康实训1 小时前
智慧养老实训室|职业院校数字化实训基地
大数据·人工智能·实训室·实训室建设
一次旅行2 小时前
DeepSeek‑V4.1‑Flash‑1017完整解读:模型升级+Search/Fetch搜索API开放,Agent开发者要注意哪些坑
前端·网络·人工智能
Jsundoku2 小时前
第三章 机器学习 -- 特征工程
人工智能·机器学习
GIS数据转换器4 小时前
地下空间综合管廊运营管理平台
大数据·开发语言·人工智能·经验分享·perl
dozenyaoyida9 小时前
AI与大模型新闻日报 | 2026-10-17
人工智能·ai·chatgpt·新闻
遇码10 小时前
流式调用中途断连别直接报错:瞬态故障识别、退避重试与中文根因诊断的搭建方法
大数据·人工智能·ai·rust·数据分析·大模型·agent