2014-03-19 53 views
0

我想檢測圖像中句子的邊界框。我在C#中使用Emgu OpenCV使用HougLinesP方法來提取行,但我顯然做錯了什麼。我看了很多例子,並且estimate the skew level with houghLines幾乎是我想要做的。OCR線檢測

使用該示例圖像我做了一些預處理(閾值,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(); 

任何幫助,將不勝感激。

回答

0

您可以嘗試兩種方法:

1-利用頻域。示例here

2-預處理後,提取輪廓,收集所有點(或至少收集所有非黑色的點);用它的角度找出最小的邊界矩形。示例here

+0

感謝您的回覆,但我看了一下示例,從我所看到的內容來看,它會爲我提供整個段落的一個框。我想爲每個句子提取一個水平框。我之前也看過'傅立葉變換',我可以確定圖像傾斜角度,但不能提取文本行。 – user19

+0

您也可以爲每個輪廓(WORDS)確定最小矩形。只需使用minAreaRect方法來設置點集。如果你想提取SENTENCES,那麼它有點難度 - 你需要檢測點。 – baci