2012-06-09 16 views
11

Często w procesie OCR plik obrazu jest zasadniczo cięty na segmenty, a każdy znak jest rozpoznawany jako segment. Na przykład Unsegmented text as imageJak przekonwertować obraz na segmenty znaków?

musi zostać przekształcona w coś podobnego Image in which text has been segmented and is ready for OCR

Także, czy istnieje algorytm dla języków azjatyckich, takich jak Telugu łatwo dostępnych do tego celu? Jeśli nie, jak to zrobić w przypadku języka angielskiego?

Odpowiedz

36

Można to łatwo zrobić za pomocą OpenCV. Poniżej znajduje się przykładowy kod:

import cv2 
import numpy as np 

# Load the image 
img = cv2.imread('sof.png') 

# convert to grayscale 
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) 

# smooth the image to avoid noises 
gray = cv2.medianBlur(gray,5) 

# Apply adaptive threshold 
thresh = cv2.adaptiveThreshold(gray,255,1,1,11,2) 
thresh_color = cv2.cvtColor(thresh,cv2.COLOR_GRAY2BGR) 

# apply some dilation and erosion to join the gaps 
thresh = cv2.dilate(thresh,None,iterations = 3) 
thresh = cv2.erode(thresh,None,iterations = 2) 

# Find the contours 
contours,hierarchy = cv2.findContours(thresh,cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE) 

# For each contour, find the bounding rectangle and draw it 
for cnt in contours: 
    x,y,w,h = cv2.boundingRect(cnt) 
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) 
    cv2.rectangle(thresh_color,(x,y),(x+w,y+h),(0,255,0),2) 

# Finally show the image 
cv2.imshow('img',img) 
cv2.imshow('res',thresh_color) 
cv2.waitKey(0) 
cv2.destroyAllWindows() 

wyjściowa będzie wyglądać następująco:

enter image description hereenter image description here

+4

+1 świetna odpowiedź, ale myślę, że to może korzystać z niektórych komentarzy na każdym kroku (zwłaszcza, że ​​PO nie wspominając OpenCV w swoim pytaniu) – Amro

+1

@Amro: dodano komentarze –