【问题标题】:OCR Line detectingOCR线检测
【发布时间】:2014-03-19 11:36:34
【问题描述】:

我正在尝试检测图像中句子的边界框。我在 C# 中使用 Emgu OpenCV 使用 HougLinesP 方法来提取线条,但我显然做错了。我看过很多例子,estimate the skew level with houghLines 几乎就是我想要做的。

使用该示例图像,我进行了一些预处理(阈值、canny 等)并最终得到 http://snag.gy/sWCuO.jpg,但是当我执行 HoughLines 并在原始图像上绘制线条时,我得到 http://snag.gy/ESKmR.jpg

这是我的代码摘录:

using (MemStorage stor = new MemStorage())
{
    Image<Hsv, byte> imgHSV = new Image<Hsv, byte>(bitmap);
    Image<Gray, Byte> gray = imgHSV.Convert<Gray, Byte>().PyrDown().PyrUp();

CvInvoke.cvCanny(gray, EdgeMap, 100, 400, 3);
    IntPtr lines = CvInvoke.cvHoughLines2(EdgeMap, stor,
        Emgu.CV.CvEnum.HOUGH_TYPE.CV_HOUGH_PROBABILISTIC, 1, Math.PI / 360, 10, 
        gray.Width / 4, 20);

   Seq<LineSegment2D> segments = new Seq<LineSegment2D>(lines, stor);
   ar = segments.ToArray();

}

Graphics g = Graphics.FromImage(OriginalImage);
foreach (LineSegment2D line in ar)
{
    g.DrawLine(new Pen(Color.Blue), 
        new Point(line.P1.X, line.P1.Y), 
        new Point(line.P2.X, line.P2.Y));
}
g.Save();

任何帮助将不胜感激。

【问题讨论】:

    标签: c# opencv ocr hough-transform


    【解决方案1】:

    您可以尝试两种方法:

    1- 利用频域。示例here

    2- 预处理后,提取轮廓,收集所有点(或至少收集所有非黑色点);找到最小边界矩形及其角度。示例here

    【讨论】:

    • 感谢您的回复,但我查看了示例,从我所看到的情况来看,它会给我一个用于整个段落的框。我想为每个句子提取一个水平框。我之前也看过“傅立叶变换”,我可以确定图像倾斜角度,但不能提取文本行。
    • 您也可以确定每个轮廓 (WORDS) 的最小矩形。只需为您的点集使用 minAreaRect 方法。如果您正在寻找提取句子,那么它有点难 - 您需要检测点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    相关资源
    最近更新 更多