C++ OpenCV:从边缘检测图像中检测字母和单词

C++ OpenCV:从边缘检测图像中检测字母和单词,c++,opencv,image-processing,detection,C++,Opencv,Image Processing,Detection,我目前正在处理文本识别。以下是带有边缘检测的二值化图像的一部分(使用Canny): 编辑:我正在发布一个图像链接。我没有10个代表点,因此无法发布图像 编辑2:这是阈值化后的同一块。老实说,我不知道哪种方法更好 [ 问题仍然是一样的: 我应该如何检测某些字母?我需要确定每个字母的位置,然后是每个单词 有些信件是“打开”的吗?我的意思是它们不是封闭区 如果我使用cv::matchtemplate,是否意味着每个字母需要24个模板,每个数字需要10个模板?然后循环我的图像以确定最佳相关性 如果字母

我目前正在处理文本识别。以下是带有边缘检测的二值化图像的一部分(使用Canny):

编辑:我正在发布一个图像链接。我没有10个代表点,因此无法发布图像

编辑2:这是阈值化后的同一块。老实说,我不知道哪种方法更好

[

问题仍然是一样的:

  • 我应该如何检测某些字母?我需要确定每个字母的位置,然后是每个单词

  • 有些信件是“打开”的吗?我的意思是它们不是封闭区

  • 如果我使用
    cv::matchtemplate
    ,是否意味着每个字母需要24个模板,每个数字需要10个模板?然后循环我的图像以确定最佳相关性

  • 如果字母和正方形都是1像素宽,我应该做什么过滤/操作来关闭打开的字母?我尝试了各种扩张和侵蚀的组合,但没有效果

  • 问题是“我如何使用开放式简历进行OCR?”答案是这是一个复杂的过程,相当困难

    但也有一些提示。首先,很难检测出有轮廓的字母。大多数工具都是为填充字母设计的。但是,如果使用特定大小的阈值填充所有循环,则该图像看起来似乎只有一个非字母分心器。可以去掉非字母线,因为它们是一个巨大的连接对象

    一旦你填好这些信,它们就可以被勾勒出来

    在细节只有一个像素宽的图像上,你不能非常明智地使用形态学操作,如“打开”和“关闭”。你可以对图像进行形态学操作,但如果所有特征都是一个像素,那么细节和噪波之间本质上没有区别。不过,一旦你填充了字母,这个问题就消失了


    这并不是在告诉你怎么做,只是给你一些提示。

    正如malcolm OCR在前面的回答中提到的那样,它可以更好地处理填充字母,因此你可以做以下操作

    1使用第二种方法,但采用相反的结果,而不是您显示的结果。 2运行连接的组件标签 3对于每个组件,您可以运行OCR算法

    为了去除异常值,我将尝试使用检测到的字母之间的空间关系。它们旁边有其他水平或垂直的字母


    祝你好运

    你能上传图片而不是发送链接吗?链接上写着“无法提供安全连接”你尝试过关闭吗?看到了吗?是的。但是一些字母随后与帧连接。我想这不会有任何好处。是的,我试着解决它。这个问题有点太广泛了。你可以尝试MSER text检测。除此之外,我没有任何线索。在这种情况下,我通常会微调(或重新训练,如果我有足够的样本)lenet网络。使用caffe进行此操作相当容易,然后使用opencv dnn模块。这将为您节省大量痛苦,准确率>99%