2012-06-09 13 views
11

Spesso nel processo di OCR, un file immagine viene essenzialmente tagliato in segmenti e ogni carattere viene riconosciuto come un segmento ciascuno. Per esempio, Unsegmented text as imageCome convertire un'immagine in segmenti di caratteri?

deve essere trasformato in qualcosa di simile Image in which text has been segmented and is ready for OCR

Inoltre, c'è qualche algoritmo per le lingue asiatiche come Telugu prontamente disponibili per questo scopo? Se no, come si fa per l'inglese?

risposta

36

Può essere facilmente fatto utilizzando OpenCV. Di seguito è riportato un codice di esempio:

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() 

uscita sarà simile di seguito:

enter image description hereenter image description here

+4

+1 grande risposta, ma penso che potrebbe utilizzare alcuni commenti ad ogni passo (soprattutto perché OP non ha menzionato OpenCV nella sua domanda) – Amro

+1

@Amro: commenti aggiunti –

Problemi correlati