Không có chức năng trong OpenCV API để tính toán dòng giao nhau, nhưng khoảng cách là:
cv::Point2f start, end;
double length = cv::norm(end - start);
Nếu bạn cần một đoạn mã để tính toán nút giao thông đường sau đó ở đây là:
// Finds the intersection of two lines, or returns false.
// The lines are defined by (o1, p1) and (o2, p2).
bool intersection(Point2f o1, Point2f p1, Point2f o2, Point2f p2,
Point2f &r)
{
Point2f x = o2 - o1;
Point2f d1 = p1 - o1;
Point2f d2 = p2 - o2;
float cross = d1.x*d2.y - d1.y*d2.x;
if (abs(cross) < /*EPS*/1e-8)
return false;
double t1 = (x.x * d2.y - x.y * d2.x)/cross;
r = o1 + d1 * t1;
return true;
}
Nguồn
2011-09-16 17:23:02
Chỉ để làm rõ. Có phải các dòng trong ví dụ của bạn được xác định bởi hai điểm, hoặc là một điểm và một vector hướng? – tisch
Chúng được xác định bởi hai điểm. 'd1' và' d2' được tính bên trong hàm là các vectơ hướng. –
Cảm ơn chức năng trợ giúp! – tisch