2

デスキューを行うために、最初に画像をわずかに回転させる必要があるアプリケーションに取り組んでいます。

画像の 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 度などと出てきます。

誰かがこの問題の解決策を見つけて、画像の歪みを正しく修正できるようにしてくれれば、それは大歓迎です。

4

1 に答える 1

2

あなたが望む角度を補完する角度を見つけていると思います。

垂直に近い線は、y 軸に対して非常に小さな角度を持ちますが、x 軸に対してはほぼ 90 度の角度になります。

線分を直角三角形の斜辺と考えてください。x 軸に対して形成される角度は atan((y2-y1)/(x2-x1)) です。回転させたいと思うy軸に対する角度は atan((x2-x1)/(y2-y1)) である必要があります

于 2014-12-27T23:42:13.853 に答える