2012-12-15 47 views
2

我的問題如下: 我有一個圖像中的兩個點,我得到這兩個點之間的角度,並通過這個角度旋轉圖像。我需要在圖像中獲取這些點的新位置,但是當我嘗試使用具有相同角度的旋轉矩陣旋轉這些點時,這些點不會一致,下面的代碼中出現了什麼問題?使用Python的圖像旋轉

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

我不明白你100%在做什麼。但是,您是否認爲圖像中的y軸從頂部的0到低端的正值運行。因此,與通常的數學定義相比,方向是相反的。您以通常的方式定義了rotMat,但您必須將其應用於反向運行的圖像定義中已更改的y軸。

+0

恩,謝謝!這個問題實際上是翻譯......應該是(680,512),當我得到圖像形狀(1024,1360,3)時,我忘記了1360是x座標>。> 關於旋轉矩陣,唯一的不同之處在於它是順時針的,所以我需要使用-angle – flaviotruzzi