我怎样才能找到最接近特定点的文本?

How can i find the text that is the closets to a specific point?

我有一张图像,其标记点为最上坐标和最左坐标,我需要从该坐标找到相应的文本以获得该行的长度。

不允许我使用原始图像,所以我尝试重新创建它。我需要得到蓝色坐标下的 1700 和红色坐标下的 2777 才能找到每边的大小。现在我有了该点的坐标,我正在考虑围绕该点制作一个 ROI 并在该 ROI 中找到文本,但我不知道该怎么做。

现在我得到最外面的点是这样的:

import cv2
import numpy as np

image = cv2.imread('assets/bpcrop_3.png')
blur = cv2.GaussianBlur(image, (3,3), 0)
gray = cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY)

_, thresh = cv2.threshold(gray, 220, 255, cv2.THRESH_BINARY_INV)
kernel = np.ones((3,3), np.uint8)
dilation = cv2.dilate(thresh, kernel, iterations=35)
cnts = cv2.findContours(dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
c = max(cnts, key=cv2.contourArea)

left = tuple(c[c[:, :, 0].argmin()][0])
right = tuple(c[c[:, :, 0].argmax()][0])
top = tuple(c[c[:, :, 1].argmin()][0])
bottom = tuple(c[c[:, :, 1].argmax()][0])

我只需要知道顶部和左侧坐标旁边的文本,这样我就可以将该文本用作蓝图大小的输出。

使用 tesseract 的 hOCR or tsv 输出模式,这样你就可以获得每个提取的坐标 word/number(可能限制提取字符只提取数字)

tsv 可能更容易解析,一旦你在 python 中有每个 word/number 的列表和相应的坐标,迭代该列表以找到与点的距离最小的单词, 只需使用欧式距离即可。

最近的 word/number 可能就是您要找的

您可能需要执行此操作两次,一次用于红点,一次用于蓝点,图像旋转 90º