如何使图像均匀亮度(使用Python / PIL)

时间:2009-03-20 02:05:36

标签: python image image-processing python-imaging-library brightness

我想拍摄一张被拍摄的文件的图像,使其看起来像是被扫描过的。由于扫描仪会在整个文档上放置一个恒定的光源,我想在文档的照片上实现这种效果。所需的效果是去除任何阴影或低光区域(或至少使它们不那么明显)并使整张照片相当明亮。

我的第一个想法是找到目标图像中最亮的部分,然后它们使整个图像成为亮度。假设这甚至是正确的算法,我将如何在PIL中执行此操作?是否有亮度方法?等?

(这是this earlier question的后续行动。)

4 个答案:

答案 0 :(得分:2)

作为第一次尝试,尝试对图像进行阈值处理。暗区变黑,亮区变白。我没有使用PIL,但我想有任何简单的方法可以做到。

答案 1 :(得分:2)

尝试使用2张图像副本的ImageChops.screen(image1,image2)。如果这不令人满意,请尝试使用ImageChops模块中的其他一些功能。

此外,您可能希望首先将其转换为灰度:ImageOps.grayscale(图像)。

答案 2 :(得分:0)

首先在图像编辑程序中手动尝试,例如GIMP。我认为你正在寻找的是调整亮度和对比度。

答案 3 :(得分:0)

什么类型的图片?如果它应该是理想的纯黑色和白色,就像文本页面一样,那么您的原始数据可能就像是灰度渐变,具有不同级别的不完全黑色字母。对常数进行阈值处理可能会产生良好的结果,但如果照度太不均匀或镜头眩光干扰则不会。将图像与其自身的平滑版本进行阈值处理。使用PIL_usm.gblur(图像,半径)对其进行平滑处理,其中半径(以像素为单位)类似于十,二十或某些值,与字母元素的宽度相当。来自旧笔记的快速黑客代码只是为了说明:

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,如果这些文件有照片或其他非双层图形,你需要更聪明。