Python 有没有办法确定图像中的文本行数?

Python 有没有办法确定图像中的文本行数?,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,实际上,我必须在给定图像中找不到文本行,例如,如果我有两个图像 from PIL import ImageGrab img1=ImageGrab.grab([0,0,200,80]) img2=ImageGrab.grab([300,0,500,80]) 第一个是img1 第二个是img2 如何获取图像中的文本行数,以便它为img1输出5行,为img2输出4行?如果要在不进行文本OCR的情况下执行此操作,典型的方法是确定图像中的每行是否有一种或多种颜色 具有一种颜色的行可以假定为背景。从多

实际上,我必须在给定图像中找不到文本行,例如,如果我有两个图像

from PIL import ImageGrab
img1=ImageGrab.grab([0,0,200,80])
img2=ImageGrab.grab([300,0,500,80])

第一个是img1 第二个是img2


如何获取图像中的文本行数,以便它为img1输出5行,为img2输出4行?

如果要在不进行文本OCR的情况下执行此操作,典型的方法是确定图像中的每行是否有一种或多种颜色

具有一种颜色的行可以假定为背景。从多种颜色到单一颜色的任何转换都是文本行的底行。数一数这些转换,你就会知道图像中文本的行数

这假定:

一行的字符不会完全延伸到所绘制单元格的底部,这意味着如果顶行具有g,底行具有f-或类似配置,则可能永远不会有空行 在您的示例中,只有文本,没有图片。
您可以使用open cv查找文本图像中的行数:

grayscale = cv2.cvtColor(your_text_image, cv2.COLOR_BGR2GRAY)

# converting to binary image
_, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)

# inverting to have white text on black background
binary = 255 - binary

# calculation y axis histogram
hist = cv2.reduce(binary, 1, cv2.REDUCE_AVG).reshape(-1)

# append every y position corresponding to a bottom of text line
lines = []
for y in range(h - 1):
   if hist[y + 1] <= 2 < hist[y]:
        lines.append(y)

number_of_lines = len(lines)
首先对图像设置阈值。 计算水平投影到底部的平均像素值。 获取所有值后,找出过渡/显著间隙。如果黑色像素之间存在明显的间隙,则需要确定白色像素阈值:两行之间的白色像素数。 连续黑色像素簇的数量是您的答案。
您可以尝试Web服务,例如Microsoft的Azure认知服务的计算机视觉部分或Google Cloud Vision。您可以使用tesseract对图像进行ocr,然后计算行数。虽然图像质量似乎很低。OpenCV在3.0中也有文本检测摘要给出了一个错误如何迭代地获得一行?我怎样才能得到那条线的颜色。对于pil图像x,我找到了一个方法x.getcolors,但如何将pil图像分割为线条iIRC没有这样的函数来获得整条线条。当然,您必须在高度上迭代并检查像素,直到获得差异为止。