python - 使用 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]
解决方案
亮度和对比度可以分别使用 alpha (α) 和 beta (β) 进行调整。表达式可以写成
OpenCV 已经将其实现为cv2.convertScaleAbs()
,只需提供用户定义alpha
和beta
值。我不确定如何根据匹配标准的 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()
推荐阅读
- html - 如何对齐多个
- r - 消除数据集中的特定行
- python - 如何在python中启动并行进程?
- c# - 如何为结果进行等待异步任务以进一步操作 xamarin 表单?
- javascript - Ajax jQuery.when() 与 each() 循环
- spring-boot - Spring如何通过配置文件(取消)激活完整的包
- java - 使用哪种设计模式来避免重复数据并一次又一次地发送相同的请求?
- python - 比较 groupbydataframe 中包含负值的列的行
- javascript - 如何使表体垂直滚动material-ui?
- android - 使用颤振代码创建后在文件资源管理器中找不到目录