16

Often in the process of OCR, an image file is essentially cut into segments, and each character is recgnised as a segment each. For instance, Unsegmented text as image

has to be transformed to something like Image in which text has been segmented and is ready for OCR

Also, is there any algorithm for Asian languages like Telugu readily available for this purpose? If not, how is this done for English?

hippietrail
  • 15,848
  • 18
  • 99
  • 158
tuxnani
  • 3,634
  • 6
  • 21
  • 33

1 Answers1

45

It can be easily done using OpenCV. Below is a sample code:

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

Output will look like below:

enter image description hereenter image description here

Abid Rahman K
  • 51,886
  • 31
  • 146
  • 157
  • 5
    +1 great answer but I think it could use some comments at each step (especially since OP did not mention OpenCV in his question) – Amro Jun 10 '12 at 18:01