首页 > 解决方案 > 使用 PIL 或 Opencv 校正图像亮度的方法是什么?

问题描述

我正在寻找如何使用 OpenCV 或其他库对图像进行颜色校正。理想情况下,我应该能够选择图像的固定区域,获取其 RGB 值,然后调整整个图像,使这些 RGB 值符合标准。这个固定区域将是一张棕色的卡片。类似于摄影中的灰卡。此卡将始终位于图像的同一区域。

我有几台相机,它们似乎对图像的曝光或照明略有不同。

例如,RGB 应该是 39,28,26。如果结果为 42、28、26,则应从整个图像的 R 通道中减去 3 等。

如果这看起来更容易,我很乐意转换为 LAB 色彩空间来调整亮度级别?

有没有人有任何想法?它类似于 lightroom 如何补偿灰卡图像。

到目前为止,我已经尝试深入研究 Opencv 和 PIL,但未能成功找到任何正确的方法。我已经能够得到图像中卡的 RGB 通道的值。但不要调整这些值。

img = Image.open("data/sample_image.tif")
pixels = img.load()

#get the R value of the pixel at x=2400, y=2400
pixels[2400, 2400][0]

标签: pythonopencvpython-imaging-library

解决方案


亮度和对比度可以分别使用 alpha (α) 和 beta (β) 进行调整。表达式可以写成

在此处输入图像描述

OpenCV 已经将其实现为cv2.convertScaleAbs(),只需提供用户定义alphabeta值。我不确定如何根据匹配标准的 RBG 值进行调整


之前(左),之后(右)

在此处输入图像描述 在此处输入图像描述

import cv2

image = cv2.imread('1.jpg')

alpha = 1.95 # Contrast control (1.0-3.0)
beta = 25 # Brightness control (0-100)

adjusted = cv2.convertScaleAbs(image, alpha=alpha, beta=beta)

cv2.imshow('original', image)
cv2.imshow('adjusted', adjusted)
cv2.waitKey()

推荐阅读