接著練手圖像處理例子
?文章來源:http://www.zghlxwxcb.cn/news/detail-772593.html
拋開網(wǎng)上截圖進(jìn)行OCR識(shí)別,更多的圖源來自于我們的手機(jī),相機(jī)等等設(shè)備,而得到的圖片都并非是板正的,大多隨手一拍的圖源都是帶有角度的,所以我們需要先將圖像進(jìn)行擺正。
首先先對(duì)圖像進(jìn)行預(yù)處理,上代碼:
?
1 def edge_detect(image): 2 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 3 edges = cv2.Canny(gray, 100, 200) 4 contours, hierarchy = cv2.findContours(edges.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) 5 conts = sorted(contours, key=cv2.contourArea, reverse=True)[:5] 6 for c in conts: 7 peri = cv2.arcLength(c, True) 8 approx = cv2.approxPolyDP(c, 0.02*peri, True) 9 if len(approx) == 4: 10 ss = approx 11 cv2.drawContours(image, [ss], -1, (0, 255, 0), 2) 12 cv2.imshow('', image)
?
?
?
1、使用Canny來進(jìn)行邊緣提取。
2、使用cv2.approxPolyDP來進(jìn)行輪廓逼近。
3、將我們想要的輪廓繪制出來。
上述代碼中,cv2.approxPolyDP方法的epsilon參數(shù)很有講究,先貼上parameter和reval。
參數(shù)說明:
curve
:輸入的輪廓數(shù)據(jù)。epsilon
:指定逼近精度,即源輪廓到逼近結(jié)果的最大距離。較小的值會(huì)得到更精確的逼近,但輪廓的點(diǎn)數(shù)也會(huì)更多。closed
:一個(gè)布爾值,指示輪廓是否閉合。approxCurve
:可選參數(shù),表示輸出的逼近多邊形曲線。
該函數(shù)返回逼近多邊形的結(jié)果:
使用cv2.approxPolyDP
函數(shù)可以將復(fù)雜的輪廓近似為簡(jiǎn)單的多邊形,從而方便后續(xù)的形狀分析和處理操作。(注:針對(duì)approxPolyDP返回的坐標(biāo)順序,和輸入輪廓的順序有關(guān),下述圖片輸入的順序是逆時(shí)針)
?
關(guān)于epsilon參數(shù),這是一個(gè)和周長(zhǎng)相關(guān)的參數(shù),使用在進(jìn)行輪廓逼近時(shí)的誤差:
1、當(dāng)epsilon(ε)越大時(shí),也就是說,我們給定的誤差范圍越大,這就代表著我們得到的逼近輪廓的形狀越是粗糙或者說敷衍(頂點(diǎn)較少),但是過大時(shí)會(huì)導(dǎo)致得到的逼近形狀并不能很好的表達(dá)原始輪廓的形狀。
2、當(dāng)epsilon(ε)越小時(shí),那么得到的逼近形狀就越精確或者說細(xì)致(頂點(diǎn)較多),但是過小時(shí)會(huì)導(dǎo)致得到的逼近形狀過于接近原始輪廓,出現(xiàn)過擬合的現(xiàn)狀。
不理解的可以動(dòng)手調(diào)整傳入epsilon(ε)的值看看效果。
運(yùn)行結(jié)果:
?
參考博文:OpenCV實(shí)戰(zhàn)(4)——文檔掃描OCR識(shí)別&答題卡識(shí)別判卷(文檔掃描,圖像矯正,透視變換,OCR識(shí)別) - 戰(zhàn)爭(zhēng)熱誠(chéng) - 博客園 (cnblogs.com)文章來源地址http://www.zghlxwxcb.cn/news/detail-772593.html
到了這里,關(guān)于【Python】【OpenCV】OCR識(shí)別(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!