| | |
| | | //只能识别4种数字 |
| | | unsigned char type = types[index % ele_count_per_line]; |
| | | //printf("ele_count_line:%d\n", ele_count_line); |
| | | //是否只有一位小数 |
| | | bool one_point_num = false; |
| | | //时间 |
| | | if (type == 0) { |
| | | //时间 |
| | |
| | | //查找单位前的空格 |
| | | int num_end = -1; |
| | | int i; |
| | | for (i = endx - 11;i >= startx;i--) { |
| | | //获取是否有单位 |
| | | int last_empty_index = -1; |
| | | for (i = endx;i >= startx;i--) { |
| | | bool empty = 1; |
| | | for (int y = starty;y < endy;y++) { |
| | | if (get_binary_value(img_in[get_one_level_position(width, i, y)]) > 0) { |
| | |
| | | } |
| | | } |
| | | if (empty) { |
| | | num_end = i - 1; |
| | | last_empty_index = i; |
| | | break; |
| | | } |
| | | } |
| | | bool hasUnit = false; |
| | | if (endx - last_empty_index > num_width) { |
| | | hasUnit = true; |
| | | } |
| | | |
| | | //带有单位 |
| | | if (hasUnit) { |
| | | for (i = endx - 11;i >= startx;i--) { |
| | | bool empty = 1; |
| | | for (int y = starty;y < endy;y++) { |
| | | if (get_binary_value(img_in[get_one_level_position(width, i, y)]) > 0) { |
| | | empty = 0; |
| | | break; |
| | | } |
| | | } |
| | | if (empty) { |
| | | num_end = i - 1; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | if (m_s == -1 || m_e == -1) { |
| | | //printf("没找到小数点:%d", index); |
| | | nps[0] = -1; |
| | | nps[1] = -1; |
| | | nps[2] = -1; |
| | | nps[3] = -1; |
| | | if (hasUnit) |
| | | { |
| | | nps[0] = -1; |
| | | nps[1] = -1; |
| | | nps[2] = -1; |
| | | nps[3] = -1; |
| | | } |
| | | else { |
| | | nps[0] = startx; |
| | | nps[1] = starty; |
| | | nps[2] = endx; |
| | | nps[3] = endy; |
| | | } |
| | | |
| | | nps[4] = -1; |
| | | nps[5] = -1; |
| | |
| | | nps[5] = starty; |
| | | nps[6] = num_end; |
| | | nps[7] = endy; |
| | | if (nps[6] - nps[4] + 1 <= num_width) { |
| | | one_point_num = true; |
| | | } |
| | | } |
| | | |
| | | nps[8] = -1; |
| | |
| | | } |
| | | //百分比 |
| | | else if (type == 5) { |
| | | |
| | | |
| | | //百分比数字起始位置 |
| | | int percent_start = -1; |
| | | int emptyIndex = -1; |
| | |
| | | } |
| | | if (empty) { |
| | | emptyIndex = i; |
| | | }else if (emptyIndex > 0) { |
| | | } |
| | | else if (emptyIndex > 0) { |
| | | percent_start = i; |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | //百分比数字的结束位置 |
| | | int percent_end = -1; |
| | | emptyIndex = -1; |
| | | |
| | | |
| | | for (i = endx;i >= startx;i--) { |
| | | bool empty = 1; |
| | | for (int y = starty;y < endy;y++) { |
| | |
| | | } |
| | | if (empty) { |
| | | emptyIndex = i; |
| | | }else if (emptyIndex > 0) { |
| | | } |
| | | else if (emptyIndex > 0) { |
| | | percent_end = i; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | if (percent_start > -1) { |
| | | startx = percent_start; |
| | |
| | | endx = percent_end; |
| | | } |
| | | |
| | | |
| | | |
| | | //按照价格的形式做识别 |
| | | int m_s = -1, m_e = -1; |
| | | uchar temp[8]; |
| | |
| | | } |
| | | |
| | | if (m_s == -1 || m_e == -1) { |
| | | |
| | | |
| | | nps[0] = -1; |
| | | nps[1] = -1; |
| | | nps[2] = -1; |
| | |
| | | } |
| | | } |
| | | |
| | | int zeroCount = length_per_num - numCount; |
| | | int zeroCount = length_per_num - numCount - (one_point_num?1:0); |
| | | //最大为20位数 |
| | | int fresult[20 * 2]; |
| | | for (i = 0;i < zeroCount;i++) { |
| | |
| | | for (i = 0;i < numCount;i++) { |
| | | fresult[(i + zeroCount) * 2] = numberCols[i * 2]; |
| | | fresult[(i + zeroCount) * 2 + 1] = numberCols[i * 2 + 1]; |
| | | } |
| | | //一位小数需要在末尾填充0 |
| | | if (type == 1 && one_point_num) { |
| | | fresult[(numCount + zeroCount) * 2] = -1; |
| | | fresult[(numCount + zeroCount) * 2 + 1] = -1; |
| | | } |
| | | |
| | | //开始填充数据 |
| | |
| | | //只能识别4种数字 |
| | | unsigned char type = types[index % ele_count_per_line]; |
| | | //printf("ele_count_line:%d\n", ele_count_line); |
| | | //是否只有一位小数 |
| | | bool one_point_num = false; |
| | | //时间 |
| | | |
| | | if (type == 0) { |
| | | //时间 |
| | | int s = cols / 2; |
| | |
| | | nps[5] = starty; |
| | | nps[6] = num_end; |
| | | nps[7] = endy; |
| | | if (nps[6] - nps[4] <= num_width) { |
| | | //只有一个数字 |
| | | one_point_num = true; |
| | | } |
| | | |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | int zeroCount = length_per_num - numCount; |
| | | int zeroCount = length_per_num - numCount - (one_point_num?1:0); |
| | | //最大为20位数 |
| | | int fresult[20 * 2]; |
| | | for (i = 0;i < zeroCount;i++) { |
| | |
| | | for (i = 0;i < numCount;i++) { |
| | | fresult[(i + zeroCount) * 2] = numberCols[i * 2]; |
| | | fresult[(i + zeroCount) * 2 + 1] = numberCols[i * 2 + 1]; |
| | | } |
| | | |
| | | //TODO 如果是金额,且后面只有1位小数的,需要在末尾填充0 |
| | | if (type == 1&& one_point_num) { |
| | | fresult[(numCount + zeroCount) * 2] = -1; |
| | | fresult[(numCount + zeroCount) * 2 + 1] = -1; |
| | | } |
| | | |
| | | //开始填充数据 |
| | |
| | | |
| | | int unit_start = -1; |
| | | int i; |
| | | |
| | | //查询是否有单位 |
| | | //获取是否有单位 |
| | | int last_empty_index = -1; |
| | | for (i = endx;i >= startx;i--) { |
| | | bool empty = 1; |
| | | for (int y = starty;y < endy;y++) { |
| | | if (get_binary_value(imgs[get_one_level_position(width, i, y)]) > 0) { |
| | | empty = 0; |
| | | break; |
| | | } |
| | | } |
| | | if (empty) { |
| | | last_empty_index = i; |
| | | break; |
| | | } |
| | | } |
| | | bool hasUnit = false; |
| | | if (endx - last_empty_index > 6) { |
| | | hasUnit = true; |
| | | } |
| | | else { |
| | | //没有单位 |
| | | result[index] = 2; |
| | | return; |
| | | } |
| | | |
| | | for (i = endx - 11;i >= startx;i--) { |
| | | bool empty = 1; |
| | | for (int y = starty;y < endy;y++) { |