我目前正在处理文字识别问题。这是带边缘检测的二值化图像的一部分(使用Canny):
编辑:我发布了一个图片链接。我没有10个代表点,所以我无法发布图像。
编辑2:在阈值处理之后,这是同一块。老实说,我不知道哪种方法会更好。
[ 2
问题保持不变:
我该如何检测某些字母?我需要确定每个字母的位置,然后确定每个字。
有些字母打开了#34;是一个问题吗?我的意思是他们不是封闭的区域。
如果我使用cv::matchtemplate
,是否意味着每个字母需要24个模板,每个数字需要10个?然后循环我的图像以确定最佳相关性?
如果它们所在的字母和方块都是1像素宽,我应该使用哪些过滤器/操作来关闭打开的字母?我尝试了各种扩张和侵蚀的组合 - 没有效果。
答案 0 :(得分:0)
问题是“如何使用Open CV进行OCR?”答案是,这是一个涉及过程并且相当困难。
但有些指针。首先,它很难检测出概述的字母。大多数工具都是为填充字母设计的。但是,如果使用特定大小阈值填充所有循环,那么该图像看起来好像只有一个非字母分心器。你可以摆脱非字母线,因为它们是一个巨大的连接对象。
一旦你填写了这些字母,就可以对它们进行镂空。
在细节为一个像素宽的图像上,您不能非常明智地使用像打开和关闭这样的形态操作。您可以通过操作放置图像,但如果所有要素都是一个像素,则基本上没有细节和噪声之间的区别。但是一旦你填写了这些字母,这个问题就会消失。
这绝不是告诉你如何做到的,只是给出一些指示。
答案 1 :(得分:0)
正如前面的回答中提到的,malcolm OCR在填充的字母上会更好用,所以你可以做以下事情
1使用您的第二种方法,但采取相反的结果而不是您正在显示的结果。 2运行连接组件标签 3,每个组件都可以运行OCR算法
为了丢弃异常值,我将尝试使用检测到的字母之间的空间关系。他们出售的水平或垂直旁边有其他字母。
祝你好运