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

时间:2012-02-22 14:02:32

标签: python python-imaging-library

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

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

显然不是这么简单,所以只在整个图像上运行文本提取是行不通的!我只想查询基本过程。关于此主题,Google上没有太多可用内容。如果解决了,也许它可以帮助其他人......

感谢阅读!

3 个答案:

答案 0 :(得分:8)

如果将图像放入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()

enter image description here

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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