【问题标题】:Detect handwritten characters bounded by a box with OpenCV使用 OpenCV 检测以框为界的手写字符
【发布时间】:2019-04-07 05:21:34
【问题描述】:
我正在尝试阅读带有框输入的手写表单。
我在图像上运行了 tesseract,但得到了奇怪的结果。据我了解,我认为最好的办法是检测边界框并从图像中减去边界框。检测框(字符周围的半框)的最佳方法是什么。我试过cv2.HoughLines(),但没有结果。
我是 OpenCV 的新手。如果有人可以在这里帮助我,那将非常有帮助。
【问题讨论】:
标签:
opencv
computer-vision
python-tesseract
【解决方案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)
生成的图像更有意义。但是有没有其他简单的方法可以做到这一点?
【解决方案2】:
看来您的输入格式相当干净和一致。您可以简单地以像素为单位硬编码每个框的宽度并裁剪字符。但是,如果输入格式不固定,那么我们也可以扩展这个答案来处理它(这会有点贵),所以作为第一次尝试,我们只需硬编码框的宽度(以像素为单位)。
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)
输出:
;
;