Есть ли какой-нибудь способ найти рукописный текст из изображения с помощью opencv?

#python #opencv #image-processing #crop #handwriting-recognition

#python #opencv #обработка изображений #обрезка #распознавание рукописного ввода

Вопрос:

Входное изображение, из которого я пытался извлечь символ

вывод изображения

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

Я пробовал этот код, но он не работает для изображений всех размеров.

 import cv2
import numpy as np
cropped_Image_Location = "./"


image = cv2.imread(cropped_Image_Location "Sample/17.jpg")
gray= cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
(thresh, im_bw) = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY cv2.THRESH_OTSU)
edges = cv2.Canny(im_bw, 100, 150, apertureSize=5)
cv2.imwrite(cropped_Image_Location   'CroppedImages/edges-50-150.jpg', edges)
minLineLength = 100
lines = cv2.HoughLinesP(image=edges, rho=1, theta=np.pi / 180, 
threshold=200, lines=np.array([]),minLineLength=minLineLength, maxLineGap=20000)

try:
    a, b, c = lines.shape
    print(a,b,c)

    for i in range(a):
        cv2.line(im_bw, (lines[i][0][0], lines[i][0][1]), (lines[i][0][2], lines[i][0][3]), (255, 255, 255), 3, cv2.LINE_AA)
except:
    pass




_,thresh = cv2.threshold(im_bw,70,255,cv2.THRESH_BINARY_INV)
kernel = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3))
dilated = cv2.dilate(thresh,kernel,iterations = 0)
contours, hierarchy = 

cv2.findContours(thresh,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)

i=1
for contour in contours:

    [x,y,w,h] = cv2.boundingRect(contour)
    print(x,y,w,h)
    if w>1 and h>1:
        print(x, y, w, h,"........")
        cv2.rectangle(im_bw, (x-3, y-3), (x   w 3, y   h 3), (0, 0, 0), 1)

        cv2.imwrite(cropped_Image_Location "CroppedImages/" str(i) ".jpg",image[y-2:y h 2,x-2:x w 2])

        i=i 1
cv2.imwrite(cropped_Image_Location   'CroppedImages/lectureAll.jpg', im_bw)
# cv2.imshow("gray",im_bw)
cv2.waitKey(0)
cv2.destroyAllWindows()
  

Комментарии:

1. привет, я бы попытался подойти к этой проблеме, сначала идентифицировав все поля сетки, содержащие символы, а затем используя эти поля сетки для присвоения имени символу, поскольку было бы легко распознать эти поля по заданному входному изображению без особых проблем.