大佬教程收集整理的这篇文章主要介绍了计算机视觉:如何在发票中找到多少行(行)边界框?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有多张发票,我已经在每张发票中找到了边界框的坐标。
这里是y坐标(每个小列表是边界框的y坐标-ymin和ymax):
[[4,43],[9,47],[76,122],[30,74],[10,[81,125],[84,124],[47,90],[1,38]]
我想根据 y 坐标确定哪个边界框在第一行,哪个在第二行,哪个在第三行。更一般地说,我如何找到第一行、第二行或第三行的范围?
多张发票的行数较多或行数较少
此解决方案对阈值敏感,您可能需要根据每行中的文本量进行调整!
输出:
[17,40,53,79,95,117]
box [4,43] belongs to line 1
box [9,47] belongs to line 1
box [76,122] belongs to line 3
box [10,47] belongs to line 1
box [81,125] belongs to line 3
box [84,124] belongs to line 3
box [47,90] belongs to line 2
代码:
import cv2
# Read the image
orig = cv2.imread('input.jpg',0)[:,15:]
# The detected boxes
boxes = [[4,43],[9,47],[76,122],[30,74],[10,[81,125],[84,124],[47,90],[1,38]]
# make a deep copy
img = orig.copy()
# quantify the black pixels in each line
summ = img.sum(axis=1)
# Threshold
th = summ.mean()
img[summ>th,:] = 0
img[summ<=th,:] = 1
rows = []
for y in range(img.shape[0]-1):
if img[y,0]>img[y+1,0] or img[y,0]<img[y+1,0]:
rows.append(y)
# sort lines indices.
rows.sort()
print(rows)
# compare the indices
for box in boxes:
for idx in range(0,len(rows),2):
if box[0] < rows[idx] and box[1] > rows[idx+1]:
print("box [{},{}]".format(box[0],box[1])," belongs to line {}".format(idx//2+1))
以上是大佬教程为你收集整理的计算机视觉:如何在发票中找到多少行(行)边界框?全部内容,希望文章能够帮你解决计算机视觉:如何在发票中找到多少行(行)边界框?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。