白平衡算法代码python
时间: 2023-11-16 21:07:49 浏览: 37
以下是三种常见的白平衡算法的Python代码实现:
1. 白补丁算法
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 获取白色补丁区域
patch = img[10:50, 10:50]
# 计算白平衡系数
b, g, r = cv2.split(patch)
avg_b = cv2.mean(b)[0]
avg_g = cv2.mean(g)[0]
avg_r = cv2.mean(r)[0]
k = (avg_b + avg_g + avg_r) / 3
# 进行白平衡处理
img_wb = cv2.addWeighted(img, 1, cv2.merge([b/k, g/k, r/k]), 0, 0)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('White Balanced Image', img_wb)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
2. 灰色世界算法
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 计算白平衡系数
avg_bgr = np.mean(img, axis=(0, 1))
avg_gray = np.mean(avg_bgr)
k = avg_gray / avg_bgr
# 进行白平衡处理
img_wb = cv2.convertScaleAbs(img, alpha=k[0], beta=k[1:])
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('White Balanced Image', img_wb)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
3. 真值算法
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 将图像转换为 Lab 颜色空间
img_lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
# 计算白平衡系数
avg_l = np.mean(img_lab[:, :, 0])
k = avg_l / img_lab[:, :, 0]
# 进行白平衡处理
img_wb = cv2.merge([cv2.convertScaleAbs(channel, alpha=k) for channel in cv2.split(img_lab)])
# 将图像转换回 BGR 颜色空间
img_wb = cv2.cvtColor(img_wb, cv2.COLOR_LAB2BGR)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('White Balanced Image', img_wb)
cv2.waitKey(0)
cv2.destroyAllWindows()
```