如何使用Python/PIL制作图像均匀亮度

5
我想将一张被拍摄的文档图像处理成扫描的效果。由于扫描仪会在整个文档上放置一个恒定的光源,因此我希望在文档的照片上实现这种效果。期望的效果是消除任何阴影或低光区域(或者至少使它们不那么明显),让整个照片变得相当明亮。
我的第一个想法是找到目标图像最亮的部分,然后使整个图像都达到那个亮度。假设这是正确的算法,那我该如何在PIL中实现它?是否有获取亮度的方法等?
(这是this earlier question的后续问题。)

你能添加一张你的样例图片吗? - mmgp
4个回答

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

2
尝试使用两个图像的ImageChops.screen(image1,image2)。如果不满意,请尝试ImageChops模块中的其他一些函数。
另外,您可能需要先将其转换为灰度:ImageOps.grayscale(image)。

0
什么类型的图像?如果它应该是理想的纯黑白色,如文本页面,则您的原始数据可能是类似于带有不完全黑色字母的灰度渐变。针对常数进行阈值处理可能会产生良好的结果,但如果照明太不均匀或镜头反光干扰,则不会。将图像与其自身的平滑版本进行阈值处理。使用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...

另一方面,如果这些文档包含照片或其他非二值图形,则需要更加聪明。


0

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


不,这是因为较暗的区域应该比已经明亮的区域获得更多的亮度。 - Greg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接