如何使图像亮度均匀(使用 Python/PIL)
Posted
技术标签:
【中文标题】如何使图像亮度均匀(使用 Python/PIL)【英文标题】:How to Make an Image Uniform Brightness (using Python/PIL) 【发布时间】:2010-10-14 11:11:24 【问题描述】:我想为已拍摄的文档拍摄图像,并使其看起来像是经过扫描的。由于扫描仪会在整个文档上放置一个恒定的光源,我想在文档的照片上实现这种效果。所需的效果是消除任何阴影或低光区域(或至少使它们不那么明显)并使整张照片相当明亮。
我的第一个想法是定位目标图像中最亮的部分,然后它们使整个图像具有该亮度。假设这甚至是正确的算法,我将如何在 PIL 中做到这一点?有没有获取亮度的方法?等等?
(这是this earlier question的后续。)
【问题讨论】:
您可以添加您的示例图片吗? 【参考方案1】:作为第一次尝试,尝试对图像进行阈值处理。暗区变为黑色,亮区变为白色。我没有使用过 PIL,但我想有什么简单的方法可以做到。
【讨论】:
【参考方案2】:尝试使用 ImageChops.screen(image1, image2) 复制 2 个图像。如果不满意,请尝试 ImageChops 模块中的其他一些功能。
另外,您可能需要先将其转换为灰度:ImageOps.grayscale(image)。
【讨论】:
【参考方案3】:首先在图像编辑程序(如 GIMP)中手动尝试。我认为您正在寻找的是调整亮度和对比度。
【讨论】:
不,这不仅仅是因为较暗的区域应该比已经明亮的区域获得更多的亮度。【参考方案4】:什么类型的图像?如果它应该是理想的纯黑白,就像文本页面一样,那么您的原始数据可能类似于灰度渐变,具有不同级别的非全黑字母。对常数设置阈值可能会产生良好的结果,但如果照明太不均匀或镜头眩光干扰则不会。针对图像本身的平滑版本设置阈值。使用 PIL_usm.gblur(image, radius) 对其进行平滑处理,其中半径(以像素为单位)类似于十、二十或与字母元素宽度相当的某个值。旧笔记中的快速 hackcode 仅用于说明:
import Image
import PIL_usm
# see http://www.cazabon.com/pyCMS/PIL_usm.html for PIL_usm
img = Image.open(...)
sm = PIL_usm(img, 10)
thr = Image.ImageChops.subtract(img,sm, .001, 128)
# or whatever works 4u...
OTOH,如果这些文档有照片或其他非双层图形,你需要更聪明。
【讨论】:
以上是关于如何使图像亮度均匀(使用 Python/PIL)的主要内容,如果未能解决你的问题,请参考以下文章