python-opencv提取圖片中的表格直線--Apple的學習筆記

一滑臊,傳統(tǒng)方法

1.1

二值化后斜脂,用canny邊緣提取惭墓,然后用霍夫變換獲得直線為一般方法聋庵。比如在圖片中車道線提取上的應用祭玉。

1.2

二值化后春畔,用橫向和豎向的細長的條去腐蝕膨脹可以得到橫線和豎線,拼在一起就是完整的表格框架振峻。比如圖片中表格的提取择份。

總結

一開始我用傳統(tǒng)的第一個方法,python代碼實現(xiàn)后發(fā)現(xiàn)canny后是輪廓凤价,一條橫線和一條垂線有交點拔创,交點處就變成鏤空的十字架,導致線不連續(xù)慢逾。后來了解到膨脹腐蝕即可解決問題,效果更歐豪口注。如下python實例代碼為膨脹腐蝕方法胜卤。

二葛躏,深度學習方法(比如車道線識別)

Lanenet算法等學完深度學習再分析

三,傳統(tǒng)方法理論知識點說明

3.1 二值法

把圖片變成只有2個值的灰白圖败富。

3.2 canny方法

用于提取邊緣摩窃。基于查找的方法通過尋找圖像一階導數(shù)中的最大和最小值來檢測邊界鹦聪,通常是將邊界定位在梯度最大的方向蒂秘。因為邊緣和非邊緣的像素會有明顯突變」胬觯基于零穿越的方法通過尋找圖像二階導數(shù)零穿越來尋找邊界撇贺,通常是Laplacian過零點或者非線性差分表示的過零點松嘶。因為這是求駐點或極值的方法,也可以找到突變點缓升。

3.3 霍夫變換

利用同一直線上的點蕴轨,他們的斜率和截距相同,所以轉換為K,b坐標系中歧寺,則多個直線上的點,他們的K,b是相同的龙致,所以每個點會轉換為一條直線并且相交與k,b點顷链。但是x=1這類垂線無斜率,所以引入了r榛了,theta極坐標系煞抬。同理函數(shù)會相交某點革答。
相交的某點的函數(shù)線越多,說明極坐標函數(shù)對應的這些直線上的點越多途茫。
如下為笛卡爾坐標系的x,y溪食,取直線上的3個點,則會在極坐標系中轉換為3條函數(shù)边败,并且相交于一點捎废。


3.3.png

3.4 膨脹和腐蝕

膨脹是取像素值高的點登疗,腐蝕相反嫌蚤,是取像素值低的點脱吱。
膨脹的實現(xiàn)方法是在核區(qū)間內(nèi),取最大值续捂。腐蝕相反。所以若要堅持橫豎表格劫拗,則核區(qū)間大小一般就使用橫線或垂線矾克。
原圖如下:


3.4.png

腐蝕(erode)后可以明顯的看到圖像字母變細了
膨脹(dilate)后明顯的看到圖像字母變粗了

四胁附,傳統(tǒng)方法實實戰(zhàn)取表格框

4.1 python opencv代碼

此篇主要實現(xiàn)提取表格框,后續(xù)章節(jié)會實現(xiàn)提取單元格內(nèi)容欲逃。

import cv2
import numpy as np

image = cv2.imread('cell.jpg', 1)
#二值化
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
binary = cv2.adaptiveThreshold(~gray, 255, 
             cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 15, -10)
# cv2.imshow("cell", binary)
# cv2.waitKey(0)

rows,cols=binary.shape
scale = 20
#識別橫線
kernel  = cv2.getStructuringElement(cv2.MORPH_RECT,(cols//scale,1))
eroded = cv2.erode(binary,kernel,iterations = 1)
#cv2.imshow("Eroded Image",eroded)
dilatedcol = cv2.dilate(eroded,kernel,iterations = 1)
cv2.imshow("Dilated Image",dilatedcol)
cv2.waitKey(0)

#識別豎線
kernel = cv2.getStructuringElement(cv2.MORPH_RECT,(1,rows//scale))
eroded = cv2.erode(binary,kernel,iterations = 1)
dilatedrow = cv2.dilate(eroded,kernel,iterations = 1)
cv2.imshow("Dilated Image",dilatedrow)
cv2.waitKey(0)

#標識交點
bitwiseAnd = cv2.bitwise_and(dilatedcol,dilatedrow)
cv2.imshow("bitwiseAnd Image",bitwiseAnd)
cv2.waitKey(0)

#標識表格
merge = cv2.add(dilatedcol,dilatedrow)
cv2.imshow("add Image",merge)
cv2.waitKey(0)

4.2 效果如下

原圖


cell.jpg

過程中生成的圖


1.png
2.png
3.png
4.png
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末彰居,一起剝皮案震驚了整個濱河市撰筷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抬闯,老刑警劉巖关筒,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒸播,死亡現(xiàn)場離奇詭異,居然都是意外死亡胀屿,警方通過查閱死者的電腦和手機包雀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門才写,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奴愉,“玉大人锭硼,你說我怎么就攤上這事蜕劝。” “怎么了暑始?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵廊镜,是天一觀的道長唉俗。 經(jīng)常有香客問我,道長雹姊,這世上最難降的妖魔是什么衡楞? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任瘾境,我火速辦了婚禮,結果婚禮上犬绒,老公的妹妹穿的比我還像新娘盒犹。我一直安慰自己眨业,他們只是感情好,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布卓嫂。 她就那樣靜靜地躺著聘殖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪餐禁。 梳的紋絲不亂的頭發(fā)上帮非,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音筑舅,去河邊找鬼陨舱。 笑死游盲,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的益缎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼链峭,長吁一口氣:“原來是場噩夢啊……” “哼畦娄!你這毒婦竟也來了?” 一聲冷哼從身側響起弊仪,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤熙卡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后励饵,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體驳癌,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年役听,在試婚紗的時候發(fā)現(xiàn)自己被綠了颓鲜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡甜滨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘤袖,到底是詐尸還是另有隱情衣摩,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布捂敌,位于F島的核電站艾扮,受9級特大地震影響既琴,放射性物質發(fā)生泄漏。R本人自食惡果不足惜泡嘴,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一甫恩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酌予,春花似錦填物、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至莱褒,卻和暖如春击困,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背广凸。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工阅茶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谅海。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓脸哀,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扭吁。 傳聞我的和親對象是個殘疾皇子撞蜂,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容