检测图像中的直线

时间:2016-08-18 01:24:44

标签: c# .net

我正在尝试提取由直线水平线分隔的图像的一部分。该图像是一个文本文档,其中大多数与我的目的无关。文档的标题部分通常是我需要的所有内容,并由两条直线水平线分开(线条样式与一条线或双线略有不同,一条线比另一条线厚一些。)一条在顶部和底部标题部分。标题部分的长度是可变的,因此我无法设置固定位置。

如何提取图像的这一部分?我已经研究了一些像使用Hough Transformations和OpenCV或Accord.net这样的库的东西,但所有这些看起来都像过度杀戮这么简单。如果可能的话,我宁愿不必使用额外的库。

理想情况下,我想输入一个图像,它给出了它检测到的每条直线水平线的位置,然后我用它来设置裁剪图像的边界。有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:6)

这是用Hough变换进行的。

很难解释它在单个答案中是如何工作的,并且可能超出了你的问题的范围,但是霍夫变换的工作实现可以在许多视觉库中找到,例如OpenCV和AForge(there is also a .NET version of aforge called AForge.NET)< / p>

Hough变换将输出检测到的线条,并允许您按角度过滤它们。 这应该可以很容易地过滤掉不是水平线的每一个。

下图是使用霍夫变换检测到的线条的一个示例,并将其转换回正常图像。 (重叠为红线)

enter image description here

答案 1 :(得分:0)

如果您知道线条有多厚,则可以遍历图像中每行的前10个像素,以便x < 10 and y < imageheight

逐行运行此行,其中bool检查值设置为true每个像素行,false如果找到的像素不是行的颜色。

如果检查该行的bool值为false,则将计数设置为0;如果为true,则计数增加。

如果您发现count > linethickness并使用y的位置来了解该行的位置,则可以中断循环。