使用 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)
如何检查字符串中的三个或更多空格 - Python [重复]