Python和OpenCV -在表单中查找手写文本的轮廓和坐标

tyg4sfes  于 2023-11-22  发布在  Python
关注(0)|答案(1)|浏览(98)

我有一个扫描文件的样本。这个文件是表格(欧洲事故声明),我想检测手写文本和绘制轮廓的手写文本。
第一张图片是我的原始文档:

我想检测所有手写文本并在其上绘制边界框,如下所示:

我已经尝试过使用boxdetect,但没有成功检测到文档中的所有字段后,所需的结果应该是用户需要填写的所有字段的坐标,如:

|      Name           |        Vorname     |      Telefon
|---------------------|--------------------|----------------------
|[(101, 172, 63, 12)] |[(105, 177, 69, 18)]| [(109, 182, 74, 23)]

字符串

lvmkulzt

lvmkulzt1#

如果表单几乎完全相同,你可以扫描一个空表单,然后从书写表单中减去空表单,然后应用一个阈值和一些其他处理来创建一个只包含手写的二进制掩码,并对其应用文本检测。
下面是我在几分钟内创建的东西:

代码沿着如下行:

import numpy as np
import cv2

def size_filter(image, minimum):
    ## Find connected components
    labels, vals = cv2.connectedComponentsWithStats(image)[1:3]
    vals = vals[1:, cv2.CC_STAT_AREA]

    new_img = np.zeros_like(labels, np.uint8)

    if vals.size == 0 or max(vals) < minimum:
        return new_img

    new_img[np.isin(labels, np.arange(len(vals))[vals >= minimum] + 1)] = 255

    return new_img

## Find the difference between the written form and the empty form
difference = np.abs(written_form.astype(np.int16)-base_form.astype(np.int16))

## Apply a threshold to the form
text_mask = np.all(difference > 100, axis=2)

## Remove Noise
text_mask = size_filter(text_mask)

字符串
我只花了几分钟的时间来做这个,所以它并不完美,但这可以通过一点努力来工作。

相关问题