使用 Python / PIL 或类似方法缩小空格

Posted

技术标签:

【中文标题】使用 Python / PIL 或类似方法缩小空格【英文标题】:Use Python / PIL or similar to shrink whitespace 【发布时间】:2012-02-22 14:02:32 【问题描述】:

任何想法如何使用 Python 和 PIL 模块来缩小全选?我知道这可以通过 Gimp 实现。我正在尝试将我的应用程序打包尽可能小,GIMP 安装不是欧盟的选择。

假设您有 2 张图片,一张是 400x500,另一张是 200x100。它们都是白色的,在每个图像的边界内都有一个 100x100 的文本块。我要做的是自动去除该文本周围的空白,将该 100x100 图像文本块加载到一个变量中以进行进一步的文本提取。

显然没有这么简单,所以只对整个图像运行文本提取是行不通的!我只是想询问一下基本流程。谷歌上关于这个话题的资料不多。如果解决了,也许它也可以帮助其他人......

感谢阅读!

【问题讨论】:

【参考方案1】:

如果将图像放入numpy 数组中,很容易找到可以使用 PIL 裁剪的边缘。这里我假设空白是(255,255,255)的颜色,你可以根据自己的需要调整:

from PIL import Image
import numpy as np

im = Image.open("test.png")
pix = np.asarray(im)

pix = pix[:,:,0:3] # Drop the alpha channel
idx = np.where(pix-255)[0:2] # Drop the color when finding edges
box = map(min,idx)[::-1] + map(max,idx)[::-1]

region = im.crop(box)
region_pix = np.asarray(region)

为了显示结果的样子,我保留了轴标签,以便您可以看到box 区域的大小:

from pylab import *

subplot(121)
imshow(pix)
subplot(122)
imshow(region_pix)
show()

【讨论】:

@kokosnakoks 这个答案是 9 年前为 python 2 编写的。地图需要在 python 3 中明确显示。随时更新答案! 在python 3中需要添加地图:list(map(min,idx))[::-1]【参考方案2】:

一般算法是找到左上角像素的颜色,然后向内进行螺旋扫描,直到找到不是该颜色的像素。这将定义边界框的一个边缘。继续扫描,直到每个边缘再碰到一个。

【讨论】:

太棒了!所以本质上,我可能会为预期的像素颜色设置一个范围并调整阈值......【参考方案3】:

http://blog.damiles.com/2008/11/basic-ocr-in-opencv/

可能会有所帮助。您可以使用该教程中描述的简单边界框方法或@Tyler Eaves 螺旋建议,同样有效

【讨论】:

谢谢你的链接,我去看看 opencv for python!

以上是关于使用 Python / PIL 或类似方法缩小空格的主要内容,如果未能解决你的问题,请参考以下文章

Pillow 中重复使用crop 方法的问题(Python 的PIL fork)

如何使用 PIL 减小图像文件大小

如何检查字符串中的三个或更多空格 - Python [重复]

如何在Python 3中将QImage(QPixmap)转换为PIL图像?

使用 Python / PIL 进行多边形裁剪/剪辑

python PIL的问题