Как изолировать связанные и объединенные символы из текстового изображения, используя OpenCV - PullRequest
0 голосов
/ 19 октября 2018

Я занимаюсь разработкой системы ocr.Мне удалось довольно легко сегментировать строки и слова из изображений, но я полностью застрял в сегментации символов. Как извлечь символы из этих блоков?Я прочитал много ответов на форумах, но они были применены к текстам с достаточным интервалом между двумя символами.Я пробовал метод гистограммы, чтобы изолировать символы от слов, но результаты не являются удовлетворительными.Мои слова выглядят так. Изображение с символами, касающимися друг друга и Еще один образец .Процесс определения порога только добавляет проблем, смешивая символы еще больше.Как я могу сегментировать эти символы.Это то, что я сделал до сих пор: функция принимает двумерный список, содержащий слова размером 500 * 500 пикселей для сегментирования:

import cv2
import numpy as np
def character_detector(words):
    characters=[]
    kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
    for i in words:
        j=i
        l=[]
        for k in j:
            s=k
            f=k
            from cv2.ximgproc import THINNING_ZHANGSUEN
            s   =   cv2.ximgproc.thinning(k,s,thinningType=THINNING_ZHANGSUEN )
            s = cv2.dilate(s,kernel,iterations=3)
            k = cv2.threshold(k,75,255,cv2.THRESH_OTSU)[1]
            m = cv2.Canny(k,100,200)
            k=k-m
            i=0
            while i<5:
                m = cv2.Canny(k,100,200)
                k = k-m
                i+=1
            y_sum = cv2.reduce(k, 0, cv2.REDUCE_AVG)
            y_sum=y_sum[0]
            y_avg = sum(y_sum)//500
            hist =[]
            for i in range(0,500):
                if(y_sum[i]==0):
                    hist.append(False)
                else:
                    hist.append(True)
            j=1
            y_start=0
            y_end = 0
            y_coord=[]
            i=0
            while i<500:
                j=1
                if not(hist[i]):
                    i=i+1
                    continue
                else:
                    y_start = i
                    temp = i
                    j=0
                    while temp<500 and hist[temp]:
                        temp+=1
                        j+=1
                    i= i+j
                    y_end = y_start+j
                    y_coord.append((y_start,y_end))

            for i in range (0,len(y_coord),1):
                roi = f[0:500,y_coord[i][0]:y_coord[i][1]]
                cv2.imshow('thresh',roi)
                cv2.waitKey(0)
                cv2.destroyAllWindows()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...