2012-11-24 18 views
4

我試圖從數獨板中提取數字。在檢測到電路板,角落和變形後,我只剩下一塊板子,只有一塊板子。 現在我試圖用Tesseract android實現Tess-Two識別數字。 我通過清潔圖像以幫助tesseract在Android上

currentCell = undistortedThreshed.submat(rect); 

圖像被劃分到9份,其中rect是圍繞圖像的矩形。

現在以數字識別。

有些數字,如4,它完全可以識別。有些,大多數是6,7,8被認爲是0或沒有。

我想通過清潔currentCell圖像儘可能地幫助tesseract。目前它看起來像這樣 Inverted 6。 (也嘗試沒有倒置的閾值)。我想擺脫白線(數獨線)。 我已經試過這樣的事情(從here拍攝)

Imgproc.Canny(currentCell, currentCell, 80, 90); 
Mat lines = new Mat(); 
int threshold = 50; 
int minLineSize = 5; 
int lineGap = 20; 

Imgproc.HoughLinesP(currentCell, lines, 1, Math.PI/180, 
     threshold, minLineSize, lineGap); 
for (int x = 0; x < lines.cols() && x < 1; x++) { 
    double[] vec = lines.get(0, x); 
    double x1 = vec[0], y1 = vec[1], x2 = vec[2], y2 = vec[3]; 
    Point start = new Point(x1, y1); 
    Point end = new Point(x2, y2); 

    Core.line(currentCell, start, end, new Scalar(255), 10); 

} 

,但它不畫任何東西,我試着用線的寬度和顏色,但仍沒有搞亂。嘗試在大圖像上繪製線條,放在沒有任何形狀的圖像上,沒有任何工作。

有什麼建議嗎?

編輯

出於某種原因,它不能似乎找到任何行。 這是圖像在應用canny之後會看到的內容6 after canny,但HoughLines未檢測到任何行。嘗試了HoughLinesHoughLinesP不同的值,如OpenCV文檔中所示,但沒有任何工作... 這些是非常明顯的線..我做錯了什麼? 謝謝!

+0

使新的標量(0),而不是255. – AruniRC

回答

0

這是一個想法,馬上我的頭頂部:

記住,計算圖像中的霍夫線的代碼。這意味着您可以獲取與網格相對應的線條。

現在,只需在原始圖像上繪製這些線條,但將顏色設置爲黑色。

大部分白線現在都會被新繪製的黑線覆蓋。由於Hough線的位置並不完全符合實際線條,所以可能會保留一些小的白點。通過連接組件消除它們(並丟棄太小的組件)甚至是一些形態學操作 - 注意實際的數字保持不變 - 可以處理這些缺陷。

請嘗試一下,讓我知道。希望這可以幫助你。

+0

謝謝。這正是我想要做的,但是由於某種原因,霍夫線沒有檢測到任何線...... –

+0

然後減少'閾值','minLineSize'。如在降低門檻2,3或真的很低。看看有什麼樣的線出現。然後增加直到臨界點。 – AruniRC

+0

您還正在繪製'currentCell'圖片上的線條,該圖片已經繪製了東西。您是否嘗試過先在空白(黑色)圖像上繪製線條。也許這些線條正在繪製中,但由於圖像中已存在對象,因此無法看到它們。 – AruniRC

2

我最終做了一些不同的事情。

我用findContours得到最大的輪廓,這是數字。

通過使用boundingRect獲得了包圍盒。

使用submat和voilla來提取。我只有數字。

不幸的是,它似乎沒有任何區別。Tesseract仍然無法正確識別數字。有時它沒有給出結果,有時候,在將數字擴大後將它識別爲0. 但是這是另一個問題的問題。