【OpenCvSharp】求两直线的交点

参考https://blog.csdn.net/yinhuan1649/article/details/78732775,增加斜率不存在处理

原博客是opencv版本,转成opencvsharp非常方便

 

        public static void Main()
        {

            Mat mat = new Mat(800, 800, MatType.CV_8UC3);

            Line2D l1 = new Line2D(100, 100, 100, 700);
            Line2D l2 = new Line2D(100, 700, 700, 100);
            Cv2.Line(mat, (int)l1.Vx, (int)l1.Vy, (int)l1.X1, (int)l1.Y1, Scalar.White);
            Cv2.Line(mat, (int)l2.Vx, (int)l2.Vy, (int)l2.X1, (int)l2.Y1, Scalar.White);

            IntersectionPoint(l1, l2 out Point2d c);
            c.X = Math.Round(c.X, 0);
            c.Y = Math.Round(c.Y, 0);
            Point calccenter = new Point(c.X, c.Y);

            Console.WriteLine(calccenter);
            Cv2.Circle(mat, calccenter, 10, Scalar.Red);

       

        }



       public static void IntersectionPoint(Line2D Line1, Line2D Line2, out Point2d crossPoint)
        {


            //  如果是一条垂直线,计算斜率会发生除0错误,所以对线稍加修改,对结果影响不大
            if (Line1.X1 - Line1.Vx == 0)
            {
                Line1 = new Line2D(Line1.Vx, Line1.Vy, Line1.X1 + 0.1, Line1.Y1);
            }

            if (Line2.X1 - Line2.Vx == 0)
            {
                Line2 = new Line2D(Line2.Vx, Line2.Vy, Line2.X1 + 0.1, Line2.Y1);
            }
            //对于过两个点(Vx,Vy) 和 (X1,Y1)的直线,斜率为k=(Y1-Vy)/(X1-Vx)。
            double k1 = (Line1.Y1 - Line1.Vy) / (Line1.X1 - Line1.Vx);
            double k2 = (Line2.Y1 - Line2.Vy) / (Line2.X1 - Line2.Vx);

            //交点
            crossPoint.X = (k1 * Line1.Vx - Line1.Vy - k2 * Line2.Vx + Line2.Vy) / (k1 - k2);
            crossPoint.Y = (k1 * k2 * (Line1.Vx - Line2.Vx) + k1 * Line2.Vy - k2 * Line1.Vy) / (k1 - k2);
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

易极

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值