Пример #1
0
def divide_ver(img):
    """Divide paper by blank detection in vertical direction.

    Args:
        img: Image to be divided.

    Returns:
        A list of horizontal coordinates.
    """
    verCoorX1 = []
    verCoorX2 = []
    temp = []
    temp1 = []
    temp2 = []
    result = []
    bw = imu.preprocess_bw_inv(img)
    weight, profile = imu.vertical_proj(bw)
    # print('weight = {}'.format(weight[:100]))
    for i in range(0, len(weight)):
        if weight[i] > 0:
            if i == len(weight) - 1 or weight[i + 1] == 0:
                verCoorX2.append(i)
            if i == 0 or weight[i - 1] == 0:
                verCoorX1.append(i)

    # print(verCoorX1)
    # print(verCoorX2)
    temp = list(zip(verCoorX1, verCoorX2))
    # print(temp)

    for r in temp:
        if r[1] - r[0] > 5:
            temp1.append(r)

    first = 1 if temp1[0][0] < 100 else 0
    start = temp1[first][0]
    end = temp1[first][1]
    for r in range(first, len(temp1)):
        if r == len(temp1) - 1:
            end = temp1[r][1]
            temp2.append((start, end))
        elif temp1[r + 1][0] - temp1[r][1] < 45:
            continue
        else:
            end = temp1[r][1]
            temp2.append((start, end))
            start = temp1[r + 1][0]

    for i in temp2:
        if i[1] - i[0] > 800:
            result.append(i)

    if len(result) > 2:
        result = result[0:2]
    # print(result)
    # print(temp)
    return result
Пример #2
0
def find_char(img, coor):
    """Divide line by blank detection in horizontal direction from left to right.

    Args:
        img: Image to be divided.
        coor: A list of line coordinates.

    Returns:
        A list of first 2 or 3 characters coordinates of each lines.
    """
    result = []
    for i, c in enumerate(coor):
        verCoorX1 = []
        verCoorX2 = []
        line = []
        imgLine = img[c[1]:c[3], c[0]:c[2]]
        bw = imu.preprocess_bw_inv(imgLine, smooth=False)
        # cv2.imwrite('./res/lines/'+str(i)+'.png', bw)
        weight, profile = imu.vertical_proj(bw)
        if weight[0] > 1:
            verCoorX1.append(0)

        for i in range(1, len(weight) - 1):
            if weight[i] > 1:
                if weight[i + 1] <= 1:
                    verCoorX2.append(i)
                if weight[i - 1] <= 1:
                    verCoorX1.append(i)

        if weight[-1] > 1:
            verCoorX2.append(len(weight) - 1)

        # print(verCoorX1)
        # print(verCoorX2)
        ver = list(zip(verCoorX1, verCoorX2))
        n = 3
        for v in ver:
            if n == 0:
                break
            elif v[1] - v[0] < 3:
                continue
            else:
                line.append((v[0] + c[0], c[1], v[1] + c[0], c[3]))
                n -= 1
        result.append(line)
    return result