python白平衡白点算法代码
时间: 2023-07-23 13:06:01 浏览: 196
白平衡是一种用于调整图像颜色温度的技术,使其更接近于真实场景的颜色。下面是一个基于python的白点算法代码示例:
```python
import cv2
import numpy as np
def white_balance(img, perc=1):
"""
白点自动校正算法
:param img: 待校正图像
:param perc: 取样点占比
:return: 校正后图像
"""
h, w, c = img.shape
# 随机采样
n_pixels = int(h * w * perc)
idx = np.random.choice(h * w, n_pixels, replace=False)
# 转换为LAB空间
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
samples = lab.reshape(-1, 3)[idx]
# 计算白点
white = np.mean(samples, axis=0)
gray = np.array([white[0], 128, 128])
# 校正图像
kernel_size = int(max(h, w) * 0.02)
if kernel_size % 2 == 0:
kernel_size += 1
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_blur = cv2.GaussianBlur(img_gray, (kernel_size, kernel_size), 0)
alpha = gray[0] / img_blur.astype(np.float32)
img_norm = cv2.normalize(img, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8UC3)
img_norm = cv2.cvtColor(img_norm, cv2.COLOR_BGR2LAB)
img_norm[:, :, 0] = np.clip(img_norm[:, :, 0] * (white[0] / gray[0]), 0, 255)
img_norm = cv2.cvtColor(img_norm, cv2.COLOR_LAB2BGR)
return img_norm
```
该算法实现了以下步骤:
1. 从图像中随机采样一定比例的像素点。
2. 将采样点转换为LAB颜色空间。
3. 计算采样点的平均值作为白点,将其L通道值设为128作为灰点。
4. 通过计算白点和灰点之间的比例,校正图像的亮度。
5. 将校正后的图像转换回BGR颜色空间。
使用方法:
```python
img = cv2.imread('image.jpg')
img_wb = white_balance(img, perc=0.01)
```
其中,`img`为待校正图像,`perc`为采样点占比。调整`perc`的值可以影响算法的效果,一般取值范围在0.01~0.05之间。
阅读全文