Image processing 使用傅立叶变换检测填充表单中方框中的手写字符
我正在尝试从方框中提取手写字符。表单的扫描不一致,因此框的宽度和高度也不是常数 这是表格的一部分 我目前的做法:Image processing 使用傅立叶变换检测填充表单中方框中的手写字符,image-processing,computer-vision,artificial-intelligence,icr,Image Processing,Computer Vision,Artificial Intelligence,Icr,我正在尝试从方框中提取手写字符。表单的扫描不一致,因此框的宽度和高度也不是常数 这是表格的一部分 我目前的做法: 1。提取水平线 2。提取垂直线 3。将以上两幅图像组合起来 4。查找轮廓(使用opencv) 这种方法给了我大部分的盒子。但是,当框中填充“L”或“I”等字符时,字符中的垂直线也将作为垂直线提取的一部分进行提取。因此,轮廓也会变得混乱。 由于盒子是周期性排列的,有没有办法使用快速傅立叶变换提取盒子 傅里叶变换是我最后想到的 我宁愿尝试使用Hough线检测器来获得长线,或者像您那样使
1。提取水平线
2。提取垂直线
3。将以上两幅图像组合起来
4。查找轮廓(使用opencv) 这种方法给了我大部分的盒子。但是,当框中填充“L”或“I”等字符时,字符中的垂直线也将作为垂直线提取的一部分进行提取。因此,轮廓也会变得混乱。
由于盒子是周期性排列的,有没有办法使用快速傅立叶变换提取盒子 傅里叶变换是我最后想到的
我宁愿尝试使用Hough线检测器来获得长线,或者像您那样使用边缘检测,但我会显式地重建网格,找到它们的间距和行/列的确切位置,从而找到每个单元格。我最近提出了一个python包来处理这个确切的问题。
我通过以下方式调用并安装了它:
pip install boxdetect
它可能看起来有点像这样(您需要调整不同形式的参数:
从boxdetect导入配置
config.min_w,config.max_w=(20,50)
config.min_h,config.max_h=(20,50)
config.scaling_factors=[0.4]
config.diagration\u迭代次数=0
config.wh_ratio_range=(0.5,2.0)
config.group\u size\u range=(1100)
config.horizontal\u max\u distance\u乘数=2
从boxdetect.pipelines导入get_框
image\u path=“dumpster/m1nda.jpg”
矩形、分组矩形、组织图像、输出图像=获取框(图像路径、配置、绘图=假)
您可能希望查看下面的线程以了解更多信息:您可以尝试按颜色选择手写字符。 例如: 结果: 您可以尝试在HSV颜色空间中为蓝色墨水选择使用cv2.InRange()。
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)