2016-08-18 83 views
1

我试图提取由水平直线分隔的图像的一部分。该图像是一个文本文档,其中大部分与我的目的无关。文档的标题部分通常是我需要的所有内容,并由两条水平直线分隔(线条样式会随着一条线或双线而变化,一条线比另一条线稍粗),其中一条在顶部和底部标题部分。标题部分的长度是可变的,所以我不能设置一个固定的位置。检测图像中的直线

我该如何去提取这部分图像?我研究过一些诸如使用Hough Transformations和类似OpenCV或Accord.net的库,但所有这些对于如此简单的事情似乎都是过度的。如果可能,我宁愿不必使用额外的库。

所以理想情况下,我想输入一个图像,它给了我检测到的每条直线的位置,然后使用它来设置裁剪图像的边界。任何人都可以将我指向正确的方向吗?

+3

问上这么“似乎矫枉过正这么简单的东西” :)这是有点简单只要你能保证线是严格水平和垂直(比你可以算了算白色/黑色像素比率每行或列找到它们),否则它不是简单的。 –

+0

你知道这条线的宽度有多少像素?线是水平的,所以当我说宽度我的意思是高度XD – Neil

回答

0

如果您知道线条有多粗,您可以穿过图像中每行的前10个像素,所以x < 10 and y < imageheight

如果您发现像素不是该线的颜色,则可以通过此行逐行检查每检查值。

然后有一个计数设置为0,如果检查行的布尔值是假的,并且如果它是真实的增量。

如果您发现count > linethickness并使用该位置y来知道行的位置,则可能会中断循环。

3

这是用霍夫变换完成的。

很难解释它是如何工作在一个单一的答案后,很可能过去你的问题的范围,但霍夫变换工作的实施可以在许多视觉库,例如OpenCV的和AForge(there is also a .NET version of aforge called AForge.NET

被发现霍夫变换将输出检测线,并允许您按角度对其进行过滤。 这应该很容易筛选出不是水平线的东西。

下面的图像是用霍夫变换检测到的线条的例子,转换回正常图像。 (叠加红色线)

enter image description here