首页 > 解决方案 > 使用 cv2 填充字符中的空白

问题描述

我有一个带有文本的图像文件,我想使用 OCR 提取它。但它上面有一条对角重叠的文本行(右上角),例如这个. 我删除这条线使用,

  image = cv2.imread(image_path)

  image = cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)

  image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

  image = cv2.GaussianBlur(image, (5, 5), 0)

  image = cv2.threshold(image, 100, 255, cv2.THRESH_BINARY)[1] # 100 here as the diagonal line is grey

这会产生类似的图像,这个

注意剪切应力的粗字符,它是对角线重叠的区域之一。现在我应用 OCR。但是,前面的步骤会删除一些像素。例如,边缘位错中的e完整

这会导致糟糕的结果,例如“edve 错位”。我尝试了腐蚀和膨胀,但没有明显改善。

有什么办法可以填补角色的空缺吗?

有什么办法可以减少与对角线重叠的字符的厚度?

标签: pythonopencvocrcv2

解决方案


因为在图像中,如果您看到,我们可以将暗区(黑色)从 2^0 = 0 表示到亮区(白色) 2^8 = 256 。所以你可以尝试一件事(我也不确定):
img = cv2.imread(image_path,0) new_img = img.copy() new_img[new_img<=230] = 0 ## just try to change that 230 value to anywhere b/w 150 to 230 然后尝试使用 OCR 检查它是否真的有效。

-- 删除重叠后将其应用于图像的结果


推荐阅读