python opencv 设置白平衡
时间: 2025-01-03 12:35:24 浏览: 15
### 使用Python和OpenCV设置图像的白平衡
为了实现基于Python和OpenCV的自动白平衡调整,通常会采用灰度世界假设算法或其他更复杂的模型。下面介绍一种简单的灰度世界方法来校正图像的颜色偏差。
#### 灰度世界假设计算平均RGB值并标准化
通过计算输入图片各通道(RGB)像素强度均值,并使这些均值得到统一化处理,从而达到去除偏色的效果:
```python
import cv2
import numpy as np
def gray_world(image):
# 将BGR颜色空间转换成浮点数形式以便后续运算
image_float = image.astype(np.float32)
# 计算三个通道各自的全局平均亮度
avg_b = np.mean(image_float[:, :, 0])
avg_g = np.mean(image_float[:, :, 1])
avg_r = np.mean(image_float[:, :, 2])
# 获取整个图像所有像素的总平均亮度
sum_avg = (avg_b + avg_g + avg_r) / 3
# 对每个通道应用增益因子使得它们趋于相同水平
gain_b = sum_avg / avg_b
gain_g = sum_avg / avg_g
gain_r = sum_avg / avg_r
# 应用增益矩阵修正原始图象中的色彩失真现象
balanced_image = np.zeros_like(image_float)
for i in range(3):
if i == 0:
balanced_image[:, :, i] = image_float[:, :, i]*gain_b
elif i == 1:
balanced_image[:, :, i] = image_float[:, :, i]*gain_g
else:
balanced_image[:, :, i] = image_float[:, :, i]*gain_r
# 转换回8位整型表示法以供显示或保存
result = cv2.convertScaleAbs(balanced_image)
return result
```
此代码片段实现了基本版的灰度世界白平蘅技术[^1]。需要注意的是,在实际应用场景下可能还需要考虑更多因素如光照条件变化等影响,因此这里仅提供了一个基础版本作为入门指导。
对于更加精确的结果,则建议探索其他高级算法比如Perfect Reflection、Max RGB等,也可以尝试调用第三方库如`colour-demosaicing`来进行更为专业的色彩管理操作[^4]。
阅读全文