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
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