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

时间:2018-10-16 05:08:10

标签: opencv image-processing ocr

我有一些图像,我想从中识别文本块并在它们周围绘制矩形,但是这些图像的尺寸各不相同,因此,我将它们调整为新的尺寸,并能够在文本周围绘制块。但是之后,我必须在这些块上应用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

1 个答案:

答案 0 :(得分:1)

这比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])

我希望它能帮助