我正在开发一个应用程序,该应用程序首先需要稍微旋转图像以将其歪斜。
我在两点 (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 度等,而它们应该只有几度。
如果有人可以帮助我找到解决此问题的方法,以便我可以正确纠正图像的倾斜,那将不胜感激。