Обнаружение рукописных символов, ограниченных рамкой с помощью OpenCV

#opencv #computer-vision #python-tesseract

#opencv #компьютерное зрение #python-тессеракт #python-tesseract

Вопрос:

Я пытаюсь прочитать рукописную форму, которая содержит ввод в штучной упаковке.

Ввод в штучной упаковке

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

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

Ответ №1:

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

 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)
  

Результирующее изображение имеет больше смысла. Но есть ли какой-либо другой простой способ сделать это?

введите описание изображения здесь

Ответ №2:

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

 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)
  

Выводит:

введите описание изображения здесь ;
введите описание изображения здесь ;
введите описание изображения здесь