使用OpenCV

时间:2019-04-07 05:21:35

标签: opencv computer-vision python-tesseract

我正在尝试阅读带有框式输入的手写表格。

Boxed Input

我在图像上运行了tesseract,但得到了奇怪的结果。以我的理解,我认为最好的办法是检测边界框并将其从图像中减去。检测方块(角色周围的半方块)的最佳方法是什么。我尝试了cv2.HoughLines(),但没有结果。

我是OpenCV的新手。如果有人可以在这里帮助我,那将真的很有帮助。

2 个答案:

答案 0 :(得分:0)

您的输入格式似乎很干净且一致。您可以简单地以像素为单位硬编码每个框的宽度,然后裁剪出字符。但是,如果输入格式不是固定的,那么我们也可以扩展该答案来处理该问题(这会有点贵),因此,作为第一个尝试,我们将简单地对像素的宽度进行硬编码。

def get_image_chunks(img, size):
    chunks = []
    # To remove black borders
    padding = 2
    for i in xrange(0, img.shape[1], size):
        col_start = i + padding
        col_end = i + size - padding

        # Slicing the numpy array.
        chunks.append(img[:-padding, col_start:col_end])

    return chunks

img = cv2.imread("/Users/anmoluppal/Downloads/GLUmJ.jpg", 0)
chunks = get_image_chunks(img, 42)

输出:

enter image description here; enter image description here; enter image description here

答案 1 :(得分:0)

感谢您的想法。我刚刚意识到,也许我可以看一下垂直像素的计数并大于某个阈值

def get_pixel_count_in_col(img,col):
        count=0
        for j in range(img.shape[0]):
                if(img[j,col]<255):
                        count=count+1
        return count
def cleanup_img(img):
        foundlines=[]
        for i in range(img.shape[1]):
                if(get_pixel_count_in_col(img,i)>img.shape[0]*0.7):
                        foundlines.append(i)
                        if(get_pixel_count_in_col(img,i-1)>img.shape[0]*0.25):
                                foundlines.append(i-1)
                        if(get_pixel_count_in_col(img,i+1)>img.shape[0]*0.25):
                                foundlines.append(i+1)
        return np.delete(img,foundlines,1)

生成的图像更有意义。但是还有其他简单的方法吗?

enter image description here

预先感谢