2011-12-29 10 views
8

の行に垂直な線を描きます。
交差点点の輪郭線と線特定の距離までの線と輪郭の交点に垂線を描きたい。
私は交差点ポイントと同様にの斜線を知っています。
参考のためにこの画像を添付しています。 enter image description here私はより良い私は<strong>輪郭</strong>とその輪郭を通過している<strong>ライン</strong>を持っている画像</p> <p>と私の問題を説明OpenCVの

+0

すでに持っているもののデータについての詳細情報を追加してください。あなたはイメージを持っていますか?輪郭?あなたは軸そのものを持っていますか? –

+0

私が追加しました...それを確認してください...何をもっとしたいかを指定してください...私を助けてください.... – Wazzzy

答えて

6

あなたの写真の青い線は、A地点からB地点まで行き、あなたはB点の赤い線を描きたい場合は、次の操作を実行できます

  1. は行く方向ベクトルを取得します。 Bにこれは次のようになります v.x = B.x - A.x; v.y = B.y - A.y;
  2. ベクトルを正規化: mag = sqrt (v.x*v.x + v.y*v.y); v.x = v.x/mag; v.y = v.y/mag;
  3. は、xとyを交換し、そのうちの一つを反転させることによってベクトルを90度回転させます。回転方向についての注意:OpenCVと一般的な画像処理では、画像上のx軸とy軸はユークリッド的な方向を向いていません。特に、y軸は下向きで上向きではありません。ユークリッドでは、最後のx(最初のy)を反時計回り(ユークリッドの標準)に反転し、yを反転すると時計回りに回転します。 OpenCVでは逆です。 Vの方向に向いてBに新しい行を作成しますtemp = v.x; v.x = -v.y; v.y = temp;
  4. C.x = B.x + v.x * length; C.y = B.y + v.y * length; (あなたはそれが逆に点Dを作成することにより、両方向に延長させることもできますので、例えばOpenCVのでは時計回りの回転を取得します。単に長さを否定することによって方向)
+0

あなたの返事をありがとう....ありがとうございました...... – Wazzzy

+0

それは私のために働いた...しかし、私は編集されたイメージをもっとチェックアウトすることを知りたいです.... – Wazzzy

+0

(Dx、Dy)を見つける方法 – Wazzzy

1

これは、関数の私のバージョンです:

def getPerpCoord(aX, aY, bX, bY, length): 
    vX = bX-aX 
    vY = bY-aY 
    #print(str(vX)+" "+str(vY)) 
    if(vX == 0 or vY == 0): 
     return 0, 0, 0, 0 
    mag = math.sqrt(vX*vX + vY*vY) 
    vX = vX/mag 
    vY = vY/mag 
    temp = vX 
    vX = 0-vY 
    vY = temp 
    cX = bX + vX * length 
    cY = bY + vY * length 
    dX = bX - vX * length 
    dY = bY - vY * length 
    return int(cX), int(cY), int(dX), int(dY) 
+0

あなたは削除できます'if(vX == 0またはvY == 0):return 0、0、0、0'を返します。その場合、コードはうまく動作します。とにかく、これを投稿していただきありがとうございます! – krookedking

+0

私はエラーがあったので、 "if ..." – CofeDrink68

関連する問題