使用OpenCV检测被框定的手写字符

3

我正在尝试读取一个手写表单,其中有盒状输入框。

Boxed Input

我已经在图像上运行了tesseract,但得到了奇怪的结果。据我所知,最好的方法是检测边界框并从图像中减去它。如何检测盒子(字符周围的半框)?我尝试了cv2.HoughLines(),但没有结果。

我是OpenCV的新手。如果有人能帮我解决这个问题,那将非常有帮助。

2个回答

1
感谢您的想法。我刚刚意识到,可能可以计算垂直像素并大于某个阈值。
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


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)

输出:

输入图像描述 ; 输入图像描述 ; 输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接