python 光照补偿

import cv2
import numpy as np

def unevenLightCompensate(img, blockSize, min_num,max_num):
    gray = img
    average = np.mean(gray)

    rows_new = int(np.ceil(gray.shape[0] / blockSize))
    cols_new = int(np.ceil(gray.shape[1] / blockSize))

    blockImage = np.zeros((rows_new, cols_new), dtype=np.float32)
    for r in range(rows_new):
        for c in range(cols_new):
            rowmin = r * blockSize
            rowmax = (r + 1) * blockSize
            if (rowmax > gray.shape[0]):
                rowmax = gray.shape[0]
            colmin = c * blockSize
            colmax = (c + 1) * blockSize
            if (colmax > gray.shape[1]):
                colmax = gray.shape[1]

            imageROI = gray[rowmin:rowmax, colmin:colmax]
            temaver = np.mean(imageROI)
            blockImage[r, c] = temaver
    blockImage = blockImage - average
    blockImage2 = cv2.resize(blockImage, (gray.shape[1], gray.shape[0]), interpolation=cv2.INTER_CUBIC)
    # blockImage2[200:800,200:500]=0
    gray2 = gray.astype(np.float32)
    dst = gray2 - blockImage2
    for i in range(len(dst)):
        for j in range(len(dst[0])):
            if dst[i][j]<min_num:
                dst[i][j]=min_num
            elif dst[i][j]>max_num:
                dst[i][j]=max_num
    dst = dst.astype(np.uint8)
    # dst = cv2.GaussianBlur(dst, (3, 3), 0)

    return dst

path = 'G:/Crevice/1.jpg'
img = cv2.imread(path)
img_norm = img/255.0  
img_gamma = np.power(img_norm,0.7)*255.0
img_gamma = img_gamma.astype(np.uint8)
img = cv2.cvtColor(img_gamma,cv2.COLOR_BGR2HSV)
dst2 = unevenLightCompensate(img[:,:,2], 100,0,255)
img[:,:,2] = dst2
img = cv2.cvtColor(img,cv2.COLOR_HSV2BGR)
cv2.imwrite('G:/Crevice/out_gamma_unevenLight.jpg', img)
  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
光照补偿算法是一种用于图像处理的技术,用于校正图像中的光照不均匀问题。以下是一个常见的光照补偿算法示例: ```python import cv2 import numpy as np def apply_exposure_compensation(image, mask, alpha): # 将图像转换为浮点数类型 image = image.astype(np.float32) # 计算图像的平均亮度 mean_intensity = np.mean(image) # 计算每个像素的补偿因子 compensation_factor = alpha / mean_intensity # 对图像进行补偿 compensated_image = image * compensation_factor # 将补偿后的图像限制在0到255之间 compensated_image = np.clip(compensated_image, 0, 255) # 将图像转换回无符号8位整数类型 compensated_image = compensated_image.astype(np.uint8) # 应用掩码,只对指定区域进行补偿 masked_image = cv2.bitwise_and(compensated_image, compensated_image, mask=mask) return masked_image # 读取图像 image = cv2.imread('image.jpg') # 创建一个与图像大小相同的掩码,用于指定需要进行补偿的区域 mask = np.ones(image.shape[:2], dtype=np.uint8) # 设置补偿因子 alpha = 1.5 # 应用光照补偿算法 result = apply_exposure_compensation(image, mask, alpha) # 显示结果图像 cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上述代码中,我们首先定义了一个`apply_exposure_compensation`函数,该函数接受输入图像、掩码和补偿因子作为参数。然后,我们将图像转换为浮点数类型,并计算图像的平均亮度。接下来,我们计算每个像素的补偿因子,并将图像乘以补偿因子进行补偿。最后,我们将补偿后的图像限制在0到255之间,并将其转换回无符号8位整数类型。最后,我们应用掩码,只对指定区域进行补偿,并显示结果图像。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值