我想为已拍摄的文档拍摄图像,并使其看起来像是经过扫描的。由于扫描仪会在整个文档上放置一个恒定的光源,我想在文档的照片上实现这种效果。所需的效果是消除任何阴影或低光区域(或至少使它们不那么明显)并使整张照片相当明亮。
我的第一个想法是找到目标图像中最亮的部分,然后它们使整个图像变得如此明亮。假设这甚至是正确的算法,我将如何在 PIL 中做到这一点?有没有获取亮度的方法?ETC?
(这是这个早先问题的后续。)
我想为已拍摄的文档拍摄图像,并使其看起来像是经过扫描的。由于扫描仪会在整个文档上放置一个恒定的光源,我想在文档的照片上实现这种效果。所需的效果是消除任何阴影或低光区域(或至少使它们不那么明显)并使整张照片相当明亮。
我的第一个想法是找到目标图像中最亮的部分,然后它们使整个图像变得如此明亮。假设这甚至是正确的算法,我将如何在 PIL 中做到这一点?有没有获取亮度的方法?ETC?
(这是这个早先问题的后续。)
作为第一次尝试,尝试对图像进行阈值处理。暗区变为黑色,亮区变为白色。我没有使用过 PIL,但我想有任何简单的方法可以做到这一点。
使用 2 个图像副本尝试 ImageChops.screen(image1, image2)。如果不满意,请尝试 ImageChops 模块中的其他一些功能。
此外,您可能需要先将其转换为灰度:ImageOps.grayscale(image)。
首先在图像编辑程序中手动尝试,如 GIMP。我认为您正在寻找的是调整亮度和对比度。
什么类型的图像?如果它应该是理想的纯黑白,就像文本页面一样,那么您的原始数据可能类似于灰度渐变,其中包含不同级别的非全黑字母。对常数设置阈值可能会产生良好的结果,但如果照明太不均匀或镜头眩光干扰则不会。对图像本身的平滑版本进行阈值处理。使用 PIL_usm.gblur(image, radius) 对其进行平滑处理,其中半径(以像素为单位)类似于十、二十或与字母元素宽度相当的某个值。旧笔记中的快速黑客代码仅用于说明:
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,如果这些文件有照片或其他非双层图形,你需要更聪明。