Обнаружение рукописных символов, ограниченных рамкой с OpenCV - PullRequest
2 голосов
/ 07 апреля 2019

Я пытаюсь прочитать рукописную форму с коробочным вводом.

Boxed Input

Я запустил tesseract для изображения, но получаю странные результаты.В моем понимании, я полагаю, что лучшее, что нужно сделать, это обнаружить ограничивающий прямоугольник и минус это на изображении.Каков наилучший способ обнаружить коробку (полукруг вокруг персонажа).Я пытался cv2.HoughLines(), но безрезультатно.

Я новичок в OpenCV.Будет очень полезно, если кто-нибудь сможет мне помочь.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Спасибо за вашу идею.Я только что понял, наверное, я могу смотреть на подсчет пикселей по вертикали и превышение определенного порога

def get_pixel_count_in_col(img,col):
        count=0
        for j in range(img.shape[0]):
                if(img[j,col]<255):
                        count=count+1
        return count
def cleanup_img(img):
        foundlines=[]
        for i in range(img.shape[1]):
                if(get_pixel_count_in_col(img,i)>img.shape[0]*0.7):
                        foundlines.append(i)
                        if(get_pixel_count_in_col(img,i-1)>img.shape[0]*0.25):
                                foundlines.append(i-1)
                        if(get_pixel_count_in_col(img,i+1)>img.shape[0]*0.25):
                                foundlines.append(i+1)
        return np.delete(img,foundlines,1)

Полученное изображение имеет больше смысла.Но есть ли другой простой способ сделать это?

enter image description here

Заранее спасибо

0 голосов
/ 07 апреля 2019

Кажется, что ваш формат ввода достаточно чистый и последовательный. Вы можете просто жестко закодировать ширину каждого блока в пикселях и обрезать символы. Однако, если формат ввода не является фиксированным, мы можем расширить этот ответ, чтобы обработать его (это будет немного дороже), поэтому в качестве первой попытки мы просто пошли бы с жестким кодированием ширины блоков в пикселях.

def get_image_chunks(img, size):
    chunks = []
    # To remove black borders
    padding = 2
    for i in xrange(0, img.shape[1], size):
        col_start = i + padding
        col_end = i + size - padding

        # Slicing the numpy array.
        chunks.append(img[:-padding, col_start:col_end])

    return chunks

img = cv2.imread("/Users/anmoluppal/Downloads/GLUmJ.jpg", 0)
chunks = get_image_chunks(img, 42)

Выходы:

enter image description here; enter image description here; enter image description here

...