Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# OCR行检测_C#_Opencv_Ocr_Hough Transform - Fatal编程技术网

C# OCR行检测

C# OCR行检测,c#,opencv,ocr,hough-transform,C#,Opencv,Ocr,Hough Transform,我试图在图像中检测句子的包围盒。我在C#中使用Emgu OpenCV,使用HougLinesP方法提取线条,但我显然做错了什么。我已经看过很多例子,这正是我想做的 使用该样本图像,我做了一些预处理(阈值、canny等),最后得到了,但当我做HoughLines并在原始图像上绘制线条时,我得到了 以下是我的代码摘录: using (MemStorage stor = new MemStorage()) { Image<Hsv, byte> imgHSV = new Image&

我试图在图像中检测句子的包围盒。我在C#中使用Emgu OpenCV,使用HougLinesP方法提取线条,但我显然做错了什么。我已经看过很多例子,这正是我想做的

使用该样本图像,我做了一些预处理(阈值、canny等),最后得到了,但当我做HoughLines并在原始图像上绘制线条时,我得到了

以下是我的代码摘录:

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();
使用(MemStorage story=new MemStorage())
{
图像imgHSV=新图像(位图);
图像灰度=imgHSV.Convert().PyrDown().PyrUp();
cvCanny(灰色,EdgeMap,100400,3);
IntPtr lines=CvInvoke.cvHoughLines2(EdgeMap、stor、,
Emgu.CV.CvEnum.HOUGH_TYPE.CV_HOUGH_PROBABILISTIC,1,Math.PI/360,10,
灰色。宽度/4,20);
Seq段=新的Seq(行、存储);
ar=段。ToArray();
}
Graphics g=Graphics.FromImage(原始图像);
foreach(直线段ar中的2D直线)
{
g、 抽绳(新钢笔(蓝色),
新点(线P1.X,线P1.Y),
新点(P2.X行,P2.Y行);
}
g、 Save();

任何帮助都将不胜感激。

您可以尝试两种方法:

1-利用频域。范例


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

谢谢你的回复,但我看了这个示例,从我看到的情况来看,它会给我一个框来放整个段落。我想为每个句子提取一个水平框。我以前也看过“傅里叶变换”,我可以确定图像的倾斜角度,但不能提取文本行。你也可以确定每个轮廓(单词)的最小矩形。只需对点集使用Minareact方法即可。如果你想提取句子,那就有点难了——你需要检测点。