【问题标题】:Image Processing - Rotation and Optical Character Recognizion图像处理 - 旋转和光学字符识别
【发布时间】:2011-12-03 23:16:08
【问题描述】:

大家早上好,

今天我想关注“C++中的图像处理”这个话题。

到目前为止,我能够过滤掉图片中的所有嘈杂的东西,并将颜色更改为黑白。

但现在我有两个问题。

第一个问题
您可以在下面看到图像的屏幕截图。找出如何旋转文本的最佳方法是什么。最后,如果文本是水平的,那就太好了。有没有人有一个很好的链接或例子。


第二个问题:
怎么继续?您认为我应该将图像发送到“光学字符识别器”(a) 还是应该过滤掉每个字母 (b)

如果答案是(a),那么最小的 ocr 库是什么?到目前为止,我发现的所有库似乎都过于强大并且难以在现有项目中实施。 (如 gocr 或 tesseract)

如果答案是(b),将每个字母保存为自己的图像的最佳方法是什么?我应该搜索一个白色像素而不是从一个像素到另一个像素并将坐标保存在二维数组中吗?字母“i”是什么意思;)


感谢所有帮助我找到路的人!
抱歉上面的奇怪英语。我还是一门语言noob :-)

【问题讨论】:

  • 将图像分成仅包含一个字符的部分是一项非常重要的任务,也属于 OCR。所以你应该发送整个图像。作为非平凡案例的示例,请参阅markboulton.co.uk/images/uploads/2.gif
  • 您是否认真寻求帮助以编程方式破解验证码?就像专门设计的挑战一样,即使不是不可能,也很难使用 OCR 系统来读取它们?
  • 不,我不是在问如何破解验证码。我的主要问题是如何找出如何旋转图像中的文本以使文本水平。
  • @Spence 通常是这样,但在示例中肯定不是这样

标签: c++ image image-processing captcha


【解决方案1】:

第一个问题中问题的通常名称是“Skew Correction”

你可以用谷歌搜索它(很多参考资料)。一篇不错的论文here,举例说明了如何获得这个:

一个简单的开始方法(但不如前面提到的那么好)是执行Principal Component Analysis

【讨论】:

    【解决方案2】:

    第一个问题:

    首先,删除任何不属于字母序列的嘈杂白色像素的“规格”。一个温和的低通滤波器(像素颜色 = 周围像素的平均值),然后将像素值钳制为纯黑色或纯白色。这应该消除图像中“a”字符下方的小“点”以及任何其他规范。

    现在搜索以下像素:

    xMin = white pixel with the lowest  x value (white pixel closest to the left edge)
    xMax = white pixel with the largest x value (white pixel closest to the right edge)
    yMin = white pixel with the lowest  y value (white pixel closest to the top edge)
    yMax = white pixel with the largest y value (white pixel closest to the bottom edge)
    
    with these four pixel values, form a bounding box: Rect(xMin, yMin, xMax, yMax);
    compute the area of the bounding box and find the center.
    
    using the center of the bounding box, rotate the box by N degrees. (You can pick N: 1 degree would be an ok value).
    
    Repeat the process of finding xMin,xMax,yMin,yMax and recompute the area
    
    Continue rotating by N degrees until you've rotated K degrees.  Also rotate by -N degrees until you've rotated by -K degrees.  (Where K is the max rotation... say 30 degrees). At each step recompute the area of the bounding box.
    

    产生具有最小区域的边界框的旋转可能是使字母与底部边缘平行对齐的旋转(水平对齐)。

    【讨论】:

      【解决方案3】:

      您可以测量从底部到每个白色像素的高度,并找出文本倾斜的程度。这是一种非常简单的方法,但是当我尝试时它对我来说效果很好。

      【讨论】:

        猜你喜欢
        • 2014-05-29
        • 2011-07-16
        • 1970-01-01
        • 2013-12-25
        • 2014-04-25
        • 2014-05-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多