2011-12-29 38 views
8

tôi tốt hơn giải thích vấn đề của tôi với một hình ảnhVẽ đường vuông góc với một dòng trong opencv

Tôi có một đường viềndòng được đi qua đường viền đó.
Tại giao lộ điểm đường viền và đường thẳng Tôi muốn vẽ đường vuông góc tại điểm giao nhau của đường và đường viền lên đến một khoảng cách cụ thể.
Tôi biết các giao lộ điểm cũng như độ dốc của đường kẻ.
Để tham khảo, tôi đính kèm Hình ảnh này. enter image description here

+0

Vui lòng thêm thông tin thêm về những dữ liệu bạn đã có. Bạn có ảnh Bạn có hình ảnh ab không? một đường viền? Bạn có trục chính nó? –

+0

Tôi đã thêm ... Vui lòng kiểm tra xem ... Chỉ định bạn muốn gì hơn ... Xin hãy giúp tôi ... – Wazzzy

Trả lời

6

Nếu dòng màu xanh trong hình ảnh của bạn đi từ điểm A đến điểm B, và bạn muốn vẽ đường màu đỏ tại điểm B, bạn có thể làm như sau:

  1. Lấy vector hướng đi từ A đến B. Đây sẽ là: v.x = B.x - A.x; v.y = B.y - A.y;
  2. Đồng hóa vector: mag = sqrt (v.x*v.x + v.y*v.y); v.x = v.x/mag; v.y = v.y/mag;
  3. Xoay vector 90 độ bằng cách trao đổi x và y, và đảo ngược một trong số họ. Lưu ý về hướng quay: Trong OpenCV và xử lý hình ảnh trong trục x và y chung trên hình ảnh không được định hướng theo cách Euclidian, cụ thể là trục y chỉ xuống và không lên. Trong Euclidian, đảo ngược x cuối cùng (y ban đầu) sẽ xoay ngược chiều kim đồng hồ (tiêu chuẩn cho euclide), và đảo ngược y sẽ xoay theo chiều kim đồng hồ. Trong OpenCV thì ngược lại. Vì vậy, ví dụ để có được xoay chiều kim đồng hồ trong OpenCV: temp = v.x; v.x = -v.y; v.y = temp;
  4. Tạo một dòng mới tại B trỏ theo hướng v: C.x = B.x + v.x * length; C.y = B.y + v.y * length; (Lưu ý rằng bạn có thể làm cho nó mở rộng theo cả hai chiều bằng cách tạo ra một điểm D trong điều ngược lại . hướng bằng cách đơn giản phủ nhận chiều dài)
+0

Cảm ơn bạn đã trả lời .... Hãy để tôi thử ...... – Wazzzy

+0

Điều đó làm việc cho tôi ... Nhưng tôi muốn biết một số chi tiết kiểm tra hình ảnh chỉnh sửa .... – Wazzzy

+0

Làm thế nào để tìm (Dx, Dy) – Wazzzy

1

Đây là phiên bản của tôi về chức năng:

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

Bạn có thể loại bỏ 'if (vX == 0 hoặc vY == 0): trả về 0, 0, 0, 0', mã hoạt động tốt trong trường hợp đó. Dù sao, cảm ơn bạn đã đăng bài này! – krookedking

+0

Tôi gặp lỗi và tôi sửa chúng bằng "if ..." – CofeDrink68

Các vấn đề liên quan