程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了计算机视觉:如何在发票中找到多少行(行)边界框?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决计算机视觉:如何在发票中找到多少行(行)边界框??

开发过程中遇到计算机视觉:如何在发票中找到多少行(行)边界框?的问题如何解决?下面主要结合日常开发的经验,给出你关于计算机视觉:如何在发票中找到多少行(行)边界框?的解决方法建议,希望对你解决计算机视觉:如何在发票中找到多少行(行)边界框?有所启发或帮助;
  • 我有多张发票,我已经在每张发票中找到了边界框的坐标。

  • 这里是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,请注明来意。
标签: