デスキューを行うために、最初に画像をわずかに回転させる必要があるアプリケーションに取り組んでいます。
画像の 2 点 (x1, y1) と (x2,y2) の間の垂直線を検出しました。垂直線は完全に垂直ではありません。2 番目の 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 度などと出てきます。
誰かがこの問題の解決策を見つけて、画像の歪みを正しく修正できるようにしてくれれば、それは大歓迎です。