使用傅里叶变换从填充的表单中检测框中的手写字符

Detect handwritten characters in boxes from a filled form using Fourier transforms

我正在尝试从框中提取手写字符。表格的扫描不一致,所以框的宽度和高度也不是常量。

这是表格的一部分。

我目前的做法:
1。提取水平线
2。提取垂直线
3。合并以上两张图片
4。查找轮廓(使用opencv)

这种方法为我提供了大部分框。但是,当框内填充 "L" 或 "I" 等字符时,字符中的竖线也作为竖线提取的一部分被提取。因此轮廓也被弄乱了。
由于盒子是周期性排列的,有没有办法使用快速傅立叶变换提取盒子?

傅立叶变换是我最后想到的。

我宁愿尝试使用 Hough 线检测器来获取长线,或者像您一样使用边缘检测,但我会明确地重建网格,找到它们的间距和 rows/columns 的确切位置,因此每个单独的单元格。

我最近想出了一个 python 包来处理这个确切的问题。
我将其命名为 BoxDetect 并通过以下方式安装后:

pip install boxdetect

可能看起来有点像这样(不同的形式需要调整参数:

from boxdetect import config

config.min_w, config.max_w = (20,50)
config.min_h, config.max_h = (20,50)
config.scaling_factors = [0.4]
config.dilation_iterations = 0
config.wh_ratio_range = (0.5, 2.0)
config.group_size_range = (1, 100)
config.horizontal_max_distance_multiplier = 2


from boxdetect.pipelines import get_boxes

image_path = "dumpster/m1nda.jpg"
rects, grouped_rects, org_image, output_image = get_boxes(image_path, config, plot=False)

您可能想查看以下线程以获取更多信息:
How to detect all boxes for inputting letters in forms for a particular field?

您可以尝试select 种颜色的手写字符。 示例:

import cv2
import numpy as np
img=cv2.imread('YdUqv .jpg')
#convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
#color definition
color_lower = np.array([105,80,60])
color_upper = np.array([140,255,255])
# select  color objects
mask = cv2.inRange(hsv, color_lower, color_upper)
cv2.imwrite('hand.png', mask)

结果: