Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 如何在调整大小的图像上绘制矩形块?_Opencv_Image Processing_Ocr - Fatal编程技术网

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

Opencv 如何在调整大小的图像上绘制矩形块?,opencv,image-processing,ocr,Opencv,Image Processing,Ocr,我有一些图像,我想从中识别文本块并在其周围绘制矩形,但这些图像的尺寸不同,因此,我已将它们调整到新的尺寸,并能够在文本周围绘制块。但后来我不得不在这些块上应用OCR,当我将图像调整到较低维度时,这些块的文本变得模糊 示例:将尺寸(58474134)的图像调整为(1000700)后 我能够绘制文本块,但在获得这些块的坐标后,即使我乘以调整大小的图像的比率,也不会显示这样的精确块: x, y, w, h = cv2.boundingRect(c) x = round(x*x_old/wid)

我有一些图像,我想从中识别文本块并在其周围绘制矩形,但这些图像的尺寸不同,因此,我已将它们调整到新的尺寸,并能够在文本周围绘制块。但后来我不得不在这些块上应用OCR,当我将图像调整到较低维度时,这些块的文本变得模糊

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

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, 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],[100100])
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_比率=1.300 y_比率=1.255

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

相对矩形:

您还可以通过划分相应的尺寸来表示相对于第一个图像的矩形。相关矩形应如下所示:
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])

我希望这对您的代码有所帮助,而不是为x、y、w、h指定新值尝试将这些新计算值添加到前一个值中,如x+=round()我认为您的宽度和高度以某种方式进行了交换。你能分享你所有的代码吗?这使它更容易理解。@AnandCU谢谢你的帮助。是的,x_old和y_old被交换了,但仍然不够精确,所以我将舍入函数移到了内部除法,解决了这个问题。是的,这正是我所做的,之前我对x和y的比值感到困惑。现在,我让它工作,并准备写在这里的答案,但感谢你,我不再需要了。谢谢你的详细解释。