2014-12-27 432 views
0

我正在研究一個應用程序,它首先需要稍微旋轉圖像以便對其進行歪斜。用於圖像旋轉的Python角度計算

我已經檢測到兩點(x1,y1)和(x2,y2)之間的圖像垂直線。垂直線不完全是垂直的 - 第二個x座標稍微小於或略大於頂部x,因此該線具有斜率。

我想計算線的斜率的角度,以便我可以旋轉圖像,然後重新檢測線,以便它完全垂直。我在Python中使用OpenCV。

不幸的是,我在計算線的斜率方面存在問題,因此圖像的旋轉不準確。

我的函數來檢測圖像中的垂直線的斜率爲:

def find_vert_angles(vertical_line_candidates, vertical_line_candidates2, roi_x_coordinates,  roi_x_coordinates2): 
line_angles_radians = [] 

for line_x, line_x2 in itertools.izip(vertical_line_candidates, vertical_line_candidates2): 
    x_diff = line_x2 - line_x 
    y_diff = roi_x_coordinates[1][1] - roi_x_coordinates[0][1] 

    if x_diff != 0: 
     slope = y_diff/x_diff 
     angle_in_radians = atan(slope) 
     line_angles_radians.append(angle_in_radians) 
    else: 
     line_angles_radians.append(0) 

return line_angles_radians 

我的代碼來旋轉圖像,使得線可以是垂直如下:

skew_angle = degrees(vert_angle[1]) 
print "Detected skew angle is " + str(skew_angle) + " degrees" 
warp = cv2.getRotationMatrix2D((img_width/2,img_height/2),skew_angle,1) 
image = cv2.warpAffine(image,warp,(img_width,img_height)) 

但是旋轉角度出現在249度,89度等時,它們應該在每個方向上只有幾度。

如果任何人都可以幫我找到解決這個問題的方法,這樣我就可以正確糾正圖像的偏斜,這將非常感激。

回答

0

我相信你會找到與你想要的角度互補的角度。

幾乎垂直的線相對於y軸具有非常小的角度,但相對於x軸具有接近90度的角度。

考慮你的線段是直角三角形的斜邊。它相對於x軸形成的角度是atan((y2-y1)/(x2-x1))。相對於y軸的角度,我認爲你想旋轉的角度應該是atan((x2-x1)/(y2-y1))