openCV中边界框的旋转
Rotation of bounding box in openCV
我刚开始使用 openCV,这可能是个愚蠢的问题。
我就参照上图说吧。所以我的问题陈述是在所有文本元素周围绘制边界框。我可以方便地从图像的 json 文件中获取该信息。所以我可以从 json 得到 x、y、w 和 h 并使用 cv2.rectangle(img1, (x, y), (x + w, y + h), (255, 255, 255), 2)
问题出在json文件中,对于旋转的文本,它只提供旋转角度,而不是旋转矩形的坐标。例如上图中,对于 'yourwebsite.com',x、y、w 和 h 已给定,旋转为 -90 度。我做了一些基本的 w, h = h, w 以获得边界框。但是度数是60 ro 80怎么办呢,有没有什么函数或者方法可以得到旋转的边界框的坐标呢?
示例:
在这种情况下,闪购倾斜了 -22 度角。但是 x、y、w 和 h 是为顶部的白色矩形提供的,没有覆盖任何东西。它需要按照 json 文件中提到的特定角度倾斜,才能在 FLASH SALE 区域上方。 x 和 y 始终代表边界框的左上角。
提前致谢!
我认为你的问题是“当你只有框的左上角及其尺寸和旋转角度时如何绘制旋转的边界框”。如果这是正确的,那么您可以通过 Python/OpenCV 或使用下图和数学的任何其他工具从旋转边界框的几何和三角函数中执行此操作。
鉴于我们知道 (X1,Y1)、宽度 W、高度 H 和旋转角度 theta。这里我们使用惯例,如图所示,旋转是逆时针正向的。使用顶部对向的直角,我们可以将 (X2,Y2) 计算为
X2 = x1 + W*cos(theta)
Y2 = Y1 - W*sin(theta)
我们可以从左边的直角三角形得到(X4,Y4)为:
X4 = X1 + H*sin(theta)
Y4 = Y1 + H*cos(theta)
最后我们可以使用 (X4,Y4) 和底部的直角三角形得到 (X3,Y3):
X3 = X4 + W*cos(theta)
Y3 = Y4 - W*sin(theta)
我刚开始使用 openCV,这可能是个愚蠢的问题。
我就参照上图说吧。所以我的问题陈述是在所有文本元素周围绘制边界框。我可以方便地从图像的 json 文件中获取该信息。所以我可以从 json 得到 x、y、w 和 h 并使用 cv2.rectangle(img1, (x, y), (x + w, y + h), (255, 255, 255), 2)
问题出在json文件中,对于旋转的文本,它只提供旋转角度,而不是旋转矩形的坐标。例如上图中,对于 'yourwebsite.com',x、y、w 和 h 已给定,旋转为 -90 度。我做了一些基本的 w, h = h, w 以获得边界框。但是度数是60 ro 80怎么办呢,有没有什么函数或者方法可以得到旋转的边界框的坐标呢?
示例:
在这种情况下,闪购倾斜了 -22 度角。但是 x、y、w 和 h 是为顶部的白色矩形提供的,没有覆盖任何东西。它需要按照 json 文件中提到的特定角度倾斜,才能在 FLASH SALE 区域上方。 x 和 y 始终代表边界框的左上角。
提前致谢!
我认为你的问题是“当你只有框的左上角及其尺寸和旋转角度时如何绘制旋转的边界框”。如果这是正确的,那么您可以通过 Python/OpenCV 或使用下图和数学的任何其他工具从旋转边界框的几何和三角函数中执行此操作。
鉴于我们知道 (X1,Y1)、宽度 W、高度 H 和旋转角度 theta。这里我们使用惯例,如图所示,旋转是逆时针正向的。使用顶部对向的直角,我们可以将 (X2,Y2) 计算为
X2 = x1 + W*cos(theta)
Y2 = Y1 - W*sin(theta)
我们可以从左边的直角三角形得到(X4,Y4)为:
X4 = X1 + H*sin(theta)
Y4 = Y1 + H*cos(theta)
最后我们可以使用 (X4,Y4) 和底部的直角三角形得到 (X3,Y3):
X3 = X4 + W*cos(theta)
Y3 = Y4 - W*sin(theta)