我试图找到一种方法,打破分割线的文本扫描文件已自适应阈值。现在,我将文档的像素值存储为0到255之间的无符号整数,并取每行中像素的平均值,然后根据像素值的平均值是否大于250将行拆分为多个范围,然后取每个范围的中位数。但是,这种方法有时会失败,因为图像上可能有黑色斑点。
有没有一种更抗噪音的方法来完成这项任务?
编辑:这里有一些代码。”“扭曲”是原始图像的名称,“剪切”是我要分割图像的位置。
warped = threshold_adaptive(warped, 250, offset = 10)
warped = warped.astype("uint8") * 255
# get areas where we can split image on whitespace to make OCR more accurate
color_level = np.array([np.sum(line) / len(line) for line in warped])
cuts = []
i = 0
while(i < len(color_level)):
if color_level[i] > 250:
begin = i
while(color_level[i] > 250):
i += 1
cuts.append((i + begin)/2) # middle of the whitespace region
else:
i += 1
从输入图像中,您需要将文本设置为白色,将背景设置为黑色
然后需要计算账单的旋转角度。一个简单的方法是找到所有白点(
findNonZero
)的minAreaRect
,您将得到:然后可以旋转帐单,使文字水平:
现在可以计算水平投影(
reduce
)。你可以取每行的平均值。在直方图上应用阈值th
来解释图像中的一些噪声(这里我使用了0
,即没有噪声)。只有背景的行有一个值>0
,文本行在直方图中有一个值0
。然后取直方图中每个连续白仓序列的平均仓坐标。这将是直线的y
坐标:这是密码。它是C++的,但是由于大部分工作都是用OpenCV函数,所以它很容易转换为Python。至少,您可以将其用作参考:
基本步骤作为@Miki
而Python中的代码:
最终结果:
相关问题 更多 >
编程相关推荐