如何在调整大小的图像上绘制矩形块?

How do i draw rectangle blocks on resized image?

我有一些图像,我想从中识别文本块并在它们周围绘制矩形,但这些图像的尺寸各不相同,因此,我已将它们的大小调整为新的尺寸,并且我能够在周围绘制块文本。但之后我必须在这些块上应用 OCR,当我将图像调整为较低尺寸时,这些块文本变得模糊。

示例:将尺寸为 (5847, 4134) 的图像调整为 (1000,700) 我能够绘制文本块,但在获得这些块的坐标后,即使我乘以图像调整大小的比率,它也不会显示像这样的精确块:

调整大小后的块

使用调整后图像的坐标在原始图像上绘制块

为了在原件上绘制积木,我做了这样的事情:

x, y, w, h = cv2.boundingRect(c)
    x = round(x*x_old/wid)
    y = round(y*y_old/hei)
    w = round(w*x_old/wid)
    h = round(h*y_old/hei)

其中 x_old 是本例中的原始高度 5874,y_old 是 4134,wid 是 1000,hei 是 700

与 Opencv 相比,这更像是一个几何问题。

假设您知道尺寸为 1000X1000 的图像的所有矩形,假设这些矩形是 rec1 = ([0,0],[100,100])rec2 = ([50,50],[90,90])([y1,x1],[y2,x2])

好的,现在让我们假设您有另一张形状为 1255X1300 的图像,并且您想在此新图像中相对于旧图像绘制相同的矩形。

您需要做的是找到两个图像之间的 x 和 y 比率,并将这些比率应用于图像。或者你可以用相对的方式表达你的矩形。

计算比率:

要计算两个图像之间的比率,只需除以其 x 和 y 维度:

x_ratio = x_new/x_old
y_ratio = y_new/y_old

在我们的例子中是:

x_ratio = 1.300 y_ratio = 1.255

现在您将此比率应用于矩形并四舍五入其值。您只需将矩形的 x 乘以 x_ratio,将矩形的 y 乘以 y_ratio,然后将值四舍五入(请记住,四舍五入会使它失去一点精度)

相对矩形:

您还可以通过划分相应的尺寸来表示相对于第一张图像的矩形。相关矩形应如下所示:rel_rec1 = ([0.,0.],[0.1,0.1])rel_rec2 = ([0.05,0.05],[0.09,0.09])

然后,要知道新图像中矩形的绝对值,只需将相对矩形乘以新图像的尺寸并四舍五入即可,例如

new_rec2 = ([0.05*1255,0.05*1300],[0.09*1255,0.09*1300])

希望对您有所帮助