我在网上只能找到关于 OCR 的信息,但我还没有,我仍然需要识别图像中字母的位置。
任何帮助将不胜感激
有趣的是,答案并不像看起来那么简单。有些人可能认为在图片上定位字符是 OCR 的第一步,但事实并非如此。实际上,在您真正完成识别之前,您无法确定每个字符的位置。
它的工作方式完全取决于您要识别的图像类型。首先,您应该在文本区域(块)和其他所有内容上分割您的图像。
仅举几个例子:
从这一刻开始,您不再需要原始图像,您所需要的只是文本块的二值化图像。所有 OCR 算法都适用于二进制图像。您可能还需要进行其他类型的图像转换,如直线拉直、透视校正、倾斜校正等 - 所有这些再次取决于您识别的图像类型。
找到文本块并对其进行规范化后,您应该进一步查找文本块上的文本行。在文本水平线的简单情况下,通过水平线创建像素直方图非常简单。
现在,当你有台词的时候,你可能会认为现在很简单,你可以把它分成字符,huray!再次,这是错误的。有连字、断字甚至连字(两个字母形成一个单一的形状)等现象,或者字母的部分在下一个字符的右上方或下方。你应该做的是创建几个分割线到单词和单个字符的 hipotesis,然后尝试每个单独的变体 OCR,用置信度对每个 hypotesis 进行加权。最后一步是使用字典检查此图中的不同路径并选择最佳路径。
只有现在,当您真正识别出所有内容时,您才能说出各个角色所在的位置。
因此,简单的答案是:使用 OCR 程序识别您的图像,并从其输出中获取字符坐标。
一般来说,您会寻找几乎纯色的小连续区域。我建议对每个像素进行采样并构建一个附近像素的数组,这些像素也落在原始像素颜色的阈值内(对每个匹配像素的邻居重复)。将整个数组作为潜在角色放在一边(或现在检查)并继续前进(可能会忽略以前收集的像素以加快速度)。
如果您事先知道文本的字体大小、质量和/或颜色,则可以进行优化。如果不是,您将希望对构成“连续区域”的阈值相当慷慨。