How to convert an image into character segments?
Asked Answered
A

1

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?

Aracelis answered 9/6, 2012 at 20:7 Comment(0)
S
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

Spires answered 10/6, 2012 at 16:51 Comment(1)
+1 great answer but I think it could use some comments at each step (especially since OP did not mention OpenCV in his question)Frightful

© 2022 - 2024 — McMap. All rights reserved.