我已经使用了Google Cloud vision API来识别带有表格的文档,但是有时图像会稍微旋转一下,试图使用我想要的键的boundingPoly
来获取值,但是如何如果不在同一'y'
上,我该怎么办?
我当时正在考虑在boundingBox
的上方和下方划一条“线”,并确定该点是否位于两者之间,但我不知道该怎么做。
[18] => Array
(
[description] => Date
[boundingPoly] => Array
(
[vertices] => Array
(
[0] => Array
(
[x] => 698
[y] => 289
)
[1] => Array
(
[x] => 729
[y] => 289
)
[2] => Array
(
[x] => 729
[y] => 301
)
[3] => Array
(
[x] => 698
[y] => 301
)
)
)
)
[66] => Array
(
[description] => 25/03/2019
[boundingPoly] => Array
(
[vertices] => Array
(
[0] => Array
(
[x] => 1007
[y] => 290
)
[1] => Array
(
[x] => 1131
[y] => 290
)
[2] => Array
(
[x] => 1131
[y] => 307
)
[3] => Array
(
[x] => 1007
[y] => 307
)
)
)
)
答案 0 :(得分:2)
给出点(x1, y1)
和(x2, y2)
,可以确定第三点(x3, y3)
是否共线,如下所示。
首先,计算斜率m1 = (y2 - y1) / (x2 - x1)
。
接下来,计算斜率m2 = (y3 - y2) / (x3 - x2)
。
当且仅当m1 = m2
时,线是共线的。
共线表示它们位于同一行上。
这仅对垂直线失败;可以按如下方式分别处理这些情况:x1 = x2 = x3
,则这些点是共线的;如果x1 = x2
或x2 = x3
而不是x1 = x2 = x3
,则第三个点与前两个点不共线。
鉴于线(m1, h1)
和(m2, h2)
,您可以如下确定点(x3, y3)
是否位于这些线之间。
计算y1 = h1 + m1 * x3
和y2 = h2 + m2 * x3
。
然后,当且仅当y1 <= y3 <= y2
或y2 <= y3 <= y1
时,点位于线之间。
2.如果两条线都是垂直线x = x1
和x = x2
,则当且仅当x1 <= x3 <= x2
或x2 <= x3 <= x1
时,点才位于两条线之间。
如果恰好其中一行是垂直的(为便于表示,假设它是第一行),则计算x2 = (y3 - h2) / m2
;那么,当且仅当x1 <= x3 <= x2
或x2 <= x3 <= x1
时,点才在线之间。
(如果您的一条线是垂直的,另一条线是水平的,我想它们之间的唯一点就是它们的交点)。