Python: How to OCR characters crossed by a horizontal line

前端 未结 1 427
囚心锁ツ
囚心锁ツ 2021-01-07 00:36

I have a batch of images which I would like to scan. Some of them have got a horizontal line crossing the characters that have to be scanned, which would look like this:

相关标签:
1条回答
  • 2021-01-07 01:40

    Following @Rethunk advice, I did the following:

    # Line parameters
    minLineLength = 100
    maxLineGap = 10
    color = 255
    size = 1
    
    # Substracts the black line
    lines = cv2.HoughLinesP(im_wb,1,np.pi/180,minLineLength,maxLineGap)[0]
    
    # Makes a list of the y's located at position x0 and x1
    y0_list = []
    y1_list = []
    for x0,y0,x1,y1 in lines:
        if x0 == 0:
            y0_list.append(y0)
        if x1 == im_wb.shape[1]:
            y1_list.append(y1)
    
    # Calculates line thickness and its half
    thick = max(len(y0_list), len(y1_list))
    hthick = int(thick/2)
    
    # Initial and ending point of the full line
    x0, x1, y0, y1 = (0, im_wb.shape[1], sum(y0_list)/len(y0_list), sum(y1_list)/len(y1_list))
    
    # Iterates all x's and prints makes a vertical line with the desired thickness 
    # when the point is surrounded by white pixels
    for x in range(x1):
        y = int(x*(y1-y0)/x1) + y0
        if im_wb[y+hthick+1, x] == 0 and im_wb[y-hthick-1, x] == 0:
            cv2.line(img,(x,y-hthick),(x,y+hthick),colour,size) 
    
    cv2.imshow(clean', img)
    

    So, as the HoughLinesP function returns the initial and final point of horizontal lines, I made a list of the y coordinates of the points that are in the begginning and end of the image and thus I am able to know the full line equation (so if it is inclined is valid as well) and I can iterate all its points. For each point, if it is surrounded by white pixels, I remove it. The outcome is the following:

    If you have any better idea please tell!

    0 讨论(0)
提交回复
热议问题