Как преобразовать изображение в символьные сегменты?

Часто в процессе распознавания файл изображения по существу разрезается на сегменты, и каждый символ распознается как сегмент каждого. Например,Unsegmented text as image

должен быть преобразован в нечто подобное Image in which text has been segmented and is ready for OCR

Кроме того, есть ли алгоритм для азиатских языков, таких как телугу, легко доступных для этой цели? Если нет, то как это делается для английского языка?

Ответы на вопрос(1)

Решение Вопроса

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

Вывод будет выглядеть так:

enter image description hereenter image description here

 10 июн. 2012 г., 20:01
+1 отличный ответ, но я думаю, что он мог бы использовать некоторые комментарии на каждом этапе (тем более, что OP не упомянул OpenCV в своем вопросе)
 10 июн. 2012 г., 21:37
@Amro: добавлены комментарии

Ваш ответ на вопрос