【发布时间】:2018-11-06 12:48:40
【问题描述】:
在测试计算机视觉算法对象检测时,通过旋转测试图像可以检测到一些遗漏的对象。通过这样做,矩形中每个点的 (x,y) 坐标表示的那些检测到的对象位置应该向后旋转。目标检测器的输出是一个 Numpy 数组,其中包含例如100 个元素,每个元素有 4 个对点,表示检测到的对象周围矩形的 (x,y) 坐标,即具有 (100,8) 形状的 Numpy 数组。这些对象是在原始图像的旋转版本中检测到的。因此,必须将它们旋转回来才能在原始图像上进行可视化。原始图像具有 5616x3744px 分辨率和旋转版本,例如90 度有 3744x5616px。
- 每一行就像 [x1,y1,x2,y2,x3,y3,x4,y4]
问题是我们如何将所有这些点围绕图像中心旋转成一条线,让我们认为是 (2808,1872)。当我运行以下代码时,Python 会抛出 ValueError: operands could not be broadcast together with shapes (1000,8) (2,) 的错误,这是有道理的。在这种情况下,速度很重要。所以我尽量避免使用for 循环。
def Rotate2D(pts,cnt,degree):
ang = math.radians(degree)
'''pts = {} Rotates points(nx2) about center cnt(2) by angle ang(1) in radian'''
return scipy.dot(pts-cnt,scipy.array([[scipy.cos(ang),scipy.sin(ang)],[-scipy.sin(ang),scipy.cos(ang)]]))+cnt
【问题讨论】:
-
@MateenUlhaq 我刚刚添加了一个 scipy 标签
-
@U8-Forward 我删除了多余的部分,但我不知道为什么要更改 1872。在我的情况下需要 1872。
-
@U8-Forward 我认为编辑出了问题,看起来像是你更改了其中一个数字。
-
@MateenUlhaq 我怎么没改号码
-
所以,当你说 "100 个元素,每个元素有 8 个点代表
(x,y)" 你的意思是数组中的每一行包含 4 个(不是 8 个)点(即,成对的x和y)例如x1、y1、x2、y2、x3、y3、x4、y4。这是正确的吗?