原文:
OpenCV计算两条直线的交点_opencv计算两直线交点_armos的博客-CSDN博客
bool getCrossPoint(cv::Point2i &out, cv::Point2i p1, cv::Point2i p2, cv::Point2i p3, cv::Point2i p4)
{
int x1 = p1.x;
int y1 = p1.y;
int x2 = p2.x;
int y2 = p2.y;
int x3 = p3.x;
int y3 = p3.y;
int x4 = p4.x;
int y4 = p4.y;
double k1, b1;
bool k1_None = false;
if (x2 - x1 == 0)
{
k1_None = true;
}
else
{
k1 = (double)(y2 - y1) / (double)(x2 - x1); //求出LineA斜率
b1 = (double)y1 - (double)x1 * k1;
}
double k2, b2;
bool k2_None = false;
if (x4 - x3 == 0)
{
k2_None = true;
b2 = 0;
}
else
{
k2 = (double)(y4 - y3) / (double)(x4 - x3); //求出LineB斜率
b2 = (double)y3 - (double)x3 * k2;
}
if (k1_None) // LineA 水平
{
if (!k2_None) // LineB 非水平线
{
out.x = x1;
out.y = k2 * x1 + b2;
cout << "1 x=" << out.x << ", y=" << out.y;
return true;
}
}
else if (k2_None) // LineA 非水平 LineB 水平
{
out.x = x3;
out.y = k1 * x3 + b1;
cout << "2 x=" << out.x << ", y=" << out.y;
return true;
}
else if (k2 != k1) // LineA 非水平 LineB 水平
{
out.x = (double)(b2 - b1) / (double)(k1 - k2);
out.y = k1 * (double)out.x + b1;
cout << "3 x=" << out.x << ", y=" << out.y;
return true;
}
out.x = 0;
out.y = 0;
return false;
}