2016-07-19 81 views
0

我正在使用Python的opencv來清理圖像,使之可讀取tesseract。我有一個黑白圖像,經過自適應閾值處理後,它看起來不夠好。有很多紙張噪音,字母不那麼幹淨。我該如何解決它?二進制後創建可讀的詞

adaptiveThreshold方法:

cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2) 

source

adaptiveThreshold後:

after adaptiveThreshold

還我試圖腐蝕和膨脹:

kernel = np.ones((2,2), np.uint8) 
e = cv2.erode(roi_sharpen, kernel, iterations=1)) 
d = cv2.dilate(roi_sharpen, kernel, iterations=1)) 

結果:

enter image description here

enter image description here

+0

您可以在二值化之前或之後應用噪聲過濾(例如高斯濾波器)。您也可以使用邊緣檢測濾鏡(例如Canny)而不是自適應閾值來提取邊緣。 –

+0

我試過了。但更糟的是:/ –

+0

errode和dilate的組合可能會訣竅 –

回答

2

既然你注意到有大量的噪音,它總是一個好主意,嘗試一些平滑的圖像。

例如,您可以應用高斯濾波器對原始圖像

smooth_img = cv.GaussianBlur(img, (5, 5), 0, 0) 
bin_img = cv.adaptiveThreshold(smooth_img, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 2) 

我試過幾個內核的大小,似乎5×5內核給了最好的結果在這個例子中

Binary image with Gaussian blur first

如果您不喜歡圖像中的小點,可以進一步應用中值濾鏡將其去除

clean_img = cv.medianBlur(bin_img, 3) 

你會得到

After median filter

也有很多參數調整爲正方體的也一樣,如果你沒有得到滿意的結果,你可能會想嘗試一些不同的正方體設置。

+0

不錯!謝謝您的回答。這很有幫助。 –