2016-08-03 102 views
-1

我想通過對閾值進行閾值處理來預處理給定的圖片,然後將其交給Tesseract。我第一次使用Gimp(2.8.16)和130 - 255的固定範圍。然後,當我使用Java在OpenCV(3.1)中實現它時,我首先忘記調用cvtColor,導致其中仍然有一些顏色的圖片(這些地區在Gimp是白色的)。除此之外,圖片如預期。但是,當我實施相應的呼叫時,我得到的照片與我所期望的不同。看起來以前有顏色的區域現在變成黑色,而剩下的圖片與我用Gimp創建的區域相似。OpenCV閾值與預期不同

有什麼我缺少創建一個更類似的輸出?

我問這個問題的原因是,不幸的是,正方體(與PSM 6)創造了兩個圖像完全不同的結果:

  • 用於在GIMP創建的一個:「2011 1升0006」
  • 用於與OpenCV的創建的第二個: 「2011ÔÇö] L 0 0006 1」

這裏是我使用的代碼:

Mat thres = new Mat(); 
Mat tmp = new Mat(); 
Imgproc.cvtColor(src, tmp, Imgproc.COLOR_BGR2GRAY); // tmp = src.clone(); in my first attempt 
Imgproc.threshold(tmp, thres, 130, 255, Imgproc.THRESH_BINARY); 
Imgcodecs.imwrite("output.jpg", thres); 

下面是圖片:

鑑於圖片:用瘸子創建

http://i.stack.imgur.com/XOeMw.jpg

圖片:

http://i.stack.imgur.com/ox8g9.jpg

第一個結果使用的OpenCV:

http://i.stack.imgur.com/ZHLZN.jpg

01使用的OpenCV

第二結果:

http://i.stack.imgur.com/FTlw3.jpg

回答

0

在第一種情況,你是彩色圖像做閾值(TMP = src.clone()創建SRC的另一個副本,其是彩色圖像)。所以,你得到的結果就是這樣,在第二種情況下,你首先轉換爲灰度,然後閾值,從而得到更好的結果。閾值對灰度圖像很好。

+0

非常感謝您的回答! 我想創建它基於彩色圖像。但是,我不希望產生的圖像中的彩色部分,而只是黑色部分(如看起來大部分是黑色的字體)。爲了解決這個問題,我還需要做些什麼? – Max

+0

您可以遍歷圖像並檢查三個通道中的像素值,如果在所有三個通道中爲0或255,則保持相同的值,否則將替換爲0,這會將這些顏色值變爲黑色。 –