2014-04-04 52 views
0

我正在爲我的AP CS類準備一個項目,它是一個iOS應用程序,它允許用戶拍攝名片的照片,並實質上「掃描」該卡並創建聯繫人該電話根據圖片中的信息。我在邊緣檢測和自適應閾值方面取得了長足的進步,現在我需要在文字被侵蝕後找到文本。來自高方差區域的文本邊界框OpenCV

我一直在使用一些斯坦福大學的學生撰寫的論文,他們把這個作爲他們的項目之一,並且發現它很有幫助,但是我很難實現代碼來發現被侵蝕文本的邊界框。

這裏是紙的部分:

經整流的圖像的灰度級版本用於的COM普特局部強度方差以查找可能邊界框爲文本段。在名片中,文本通常位於組和多個位置。爲了計算像素處的方差,我們考慮以該像素爲中心的35×35的鄰域窗口。方差可以計算爲E [X2] - E [X] 2,其中X是表示鄰域中像素值的隨機變量,E []是期望值算子。我們通過將盒式濾波器應用於經過灰度校正的圖像來計算E [X]。通過對通過平方所有像素值而獲得的圖像應用相同的盒濾波器來計算E [X2]。 將閾值100應用於方差圖像。所有方差≥100的地區都被歸類爲文本區域。然後找到這些區域的輪廓和邊界框。矯正不完善通常會導致圖像邊界出現高度變化。非常大,非常小,太窄的盒子被拒絕。

給出這樣的圖像,我怎麼能找到使用OpenCV C++的文本的所有邊界框?包括其他斑點也可以!

enter image description here

Paper

回答

1

Convex hull會給你一個凸邊界多邊形。如果您採用圖像的漸變色,然後應用findContours(),則會獲得更多精美的字符串或段落輪廓。

最後,在倒立圖像bounding rectangle上使用findContours會給你一個直的矩形,而fitting ellipse到每個組件會給你一個近似旋轉的矩形。以下是代碼大綱:

vector<vector<Point> > contours; 
Mat hierarchy, I2=255-I; 
findContours(I2, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_NONE); 
for (int i=0; i<contours.size(); i++) 
    Rect rect = boundingRect(contours[i]); 

矢量輪廓將有一個要在每個段中使用的點的矢量。

+0

非常感謝! 'drawContours'函數會在圖像上「繪製」這些框嗎? – Clip

+0

它將繪製任何矢量點作爲輪廓。您也可以使用開放式CV的矩形或線形函數 – Vlad

+0

第二行中的「I」意味着什麼?我猜「I2」是被侵蝕的圖像。 – Clip