2

我的问题如下:我在图像中有两个点,我得到这两个点之间的角度并将图像旋转这个角度。我需要获取图像中这些点的新位置,但是当我尝试使用具有相同角度的旋转矩阵来旋转这些点时,这些点不会一致,下面的代码有什么问题?

def rotMat(angle):
  return asarray([[cos(angle), -sin(angle)],[sin(angle),cos(angle)]])

for i in batch2:
  figure(1)
  filename = "../imagens/" + i[-1]
  outputFile = "./output/" + i[-1]
  x1 = float(i[22]) # x coordinate of first point
  y1 = float(i[23]) # y coordinate of first point
  x2 = float(i[34]) # x coordinate of second point
  y2 = float(i[35]) # y coordinate of second point

  # angle of rotation
  angle = arctan((y1-y2)/(x1-x2))

  im = imread(filename)
  im = ndimage.rotate(im, angle*180/pi, reshape=False)

  imshow(im)
  p1 = asarray([x1,y1])
  p2 = asarray([x2,y2])    

  # Rotating the points 
  # [512,680] is the center of the image
  p1n = (p1-[512,680]).dot(rotMat(angle)) + [512,680]

  p2n = (p2-[512,680]).dot(rotMat(angle)) + [512,680]

  print p1n, p2n

  plot(p1n[0],p1n[1],'d')
  plot(p2n[0],p2n[1],'d')

  savefig(outputFile)
  clf()
4

1 回答 1

4

我不明白你在做什么 100%。但是,您是否考虑过图像中的 y 轴从顶部的 0 到较低点的正值。因此,与通常的数学定义相比,方向是相反的。您rotMat以通常的方式定义,但您必须将其用于在相反方向运行的图像定义中更改的 y 轴。

于 2012-12-15T22:33:43.610 回答