使用python和PIL如何在图像中获取文本块?

使用python和PIL如何在图像中获取文本块?,python,image-processing,python-imaging-library,python-2.7,Python,Image Processing,Python Imaging Library,Python 2.7,我有一个包含两个文本块的图像(*.png)。我试图使用python27中的python图像库(PIL)分别获取每个文本块 我已经尝试模糊图像,然后找到模糊块的边缘,这样我就可以恢复每个块的边界(稍后用于“裁剪”)。然而,当我模糊图像时(我已经尝试了多次迭代),“find_Edge”过滤器似乎只是抓住了每个角色的边缘 pic = Image.open("a.jpg") out = pic.filter(ImageFilter.BLUR) out = out.filter(ImageFilter.F

我有一个包含两个文本块的图像(*.png)。我试图使用python27中的python图像库(PIL)分别获取每个文本块

我已经尝试模糊图像,然后找到模糊块的边缘,这样我就可以恢复每个块的边界(稍后用于“裁剪”)。然而,当我模糊图像时(我已经尝试了多次迭代),“find_Edge”过滤器似乎只是抓住了每个角色的边缘

pic = Image.open("a.jpg")
out = pic.filter(ImageFilter.BLUR)
out = out.filter(ImageFilter.FIND_EDGES)

我想我正在寻找类似于photoshop“磁性套索工具”的东西。你知道什么方法更好吗?

我会先制作一个投影到一个轴上的图像直方图。照你的照片。投影到y轴的直方图示例:

from PIL import Image
import numpy as np

im = Image.open("dummytext.png")
pix = np.asarray(im)
pix = pix[:,:,0:3] # Drop the alpha channel
pix = 255 - pix  # Invert the image
H =  pix.sum(axis=2).sum(axis=1) # Sum the colors, then the y-axis


从这里,确定最大的空白块。这将确定要拆分的最佳y坐标。注意在上面的直方图中它是多么明显。如果两个文本块靠得更近,您需要一个更好的标准,只需调整方法以满足您的需要。分割后,可以单独裁剪图像

是的,PIL中的“查找边”过滤器类似于Photoshop中同名的过滤器。它跟踪图像中检测到的边缘——实体形状变成轮廓。这就是我所追求的,但是我希望整个文本块被轮廓化,而不是每个单独的字符,这是目前正在发生的事情(尽管模糊).那么,简单地创建一个函数,将边界框从您的边中取出,怎么样?如果你有后者的坐标,你可以从极值开始,你可以看看我今天早些时候发布的关于用
PIL
numpy
删除空白的回答,一旦你有了外部边界,你可以做一些类似的事情来查找内部部分。这是一篇多么好的帖子——应该被接受为答案@谢谢,我很高兴它对你有用。我不太担心被接受,这就是投票的目的!