2016-08-18 91 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