2014-12-27 2 views
0

이미지를 기울여보기 위해 이미지를 약간 회전해야하는 응용 프로그램을 만들고 있습니다.이미지 회전을위한 파이썬 각도 계산

두 점 (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)이어야합니다.