2011-05-03 167 views
17

我在iPhone上使用OpenCV並需要檢測圖像中的數字。我將圖像分成較小的圖像,因此每個圖像只有一個數字(1-9)。所有數字都打印出來,而不是手寫的。OpenCV檢測號碼

用OpenCV找出數字的最佳方法是什麼?

UPDATE:

我已經成功地找到了號碼,提取它們。他們是這樣的:

http://img198.imageshack.us/img198/5671/101ht.jpg
http://img824.imageshack.us/img824/539/606yu.jpg

當它們被抽出,他們是在同尺寸等。我保存了一堆圖像,並將它們放入OCR目錄中,並將它們分類爲數字。像:ocr/1/100.jpg 101.jpg ....和ocr/2/200.jpg 201.jpg ....

然後,我打算使用與基本OCR教程中相同的方法:http://blog.damiles.com/?p=93

但是,我編程的iPhone和不能使用C代碼(編譯錯誤等),我沒有訪問highgui。

我嘗試使用cvMatchTemplate()和匹配一些圖片,但它似乎工作非常糟糕......

任何其他想法,我能試試嗎?

+0

@Linues您是否嘗試過區分圖像中的數字和字符,即僅從圖像中獲取數字或使用以下代碼輪廓的維數組中的某些東西:findContours。我試圖區分char和char。請讓我知道,如果建議從你的結尾。 – 2014-06-02 05:47:56

+0

[opencv中的基本OCR](http://blog.damiles.com/?p=93) – 2011-05-03 17:55:42

+1

謝謝。儘管如此,我已經閱讀過它。他正在手寫數字上做OCR。火車圖像是否也適用於印刷文字? – Linus 2011-05-03 18:35:39

回答

2

Objective C++? 嘗試將.m文件重命名爲.mm,然後您可以在iPhone項目中使用C++。

2

基本上你的問題只是分類一個特徵向量,這是一些預處理步驟後的像素強度的集合。您可以使用任何分類器來執行此任務,例如。神經網絡,在OpenCV中應該有一個C實現。您也可以嘗試支持向量機的C libsvm庫。

有一個good site與這個問題有關的很多論文和一個培訓數據庫。

4

如果打印的數字,這個工作很簡單,你只需要找出一個很好的功能匹配。如果數字是一個字體,你可以逃脫這種方法:

  • 提取數
  • 查找邊框
  • 縮放圖像到類似10×8,嘗試匹配寬高比
  • 這樣做對一個小的訓練集,取「平均」圖像的每個號碼

  • 對於新的圖像,按照上述步驟,但最後只是與每個數模板的絕對圖像差。然後取差值的總和(差分圖像中的像素)。最小的那個是你的號碼。

以上都是基本的OpenCV操作。

7

你可以開始有用唸叨主成分分析(PCA),Fisher的線性判別分析(LDA)和支持向量機(SVM)。這些分類方法是極其有用的用於OCR,有庫在任何語言,包括C++,Python和C#等

事實證明的OpenCV已經包括上PCAsSVMs優良實現。我還沒有看到任何OCR的OpenCV代碼示例,但是您可以使用一些修改後的臉部分類版本來執行字符分類。 OpenCV的面部識別代碼的優秀資源是this website

0

HOG + SVM(嘗試用核玩)