在OpenCV中求解两条直线的交点

问题1:给出两组坐标点[x1,y1][x2,y2]确定直线Line1?

Line1的方程表示为:

a*x+b*y+c=0   ------------(1)

分别带入两组坐标点,因为abc三个参数可以同比例放大缩小的。所以可以用下面这一组参数来表示:

a = y2 - y1;

b = x1 - x2;

c =x2*y1- y2*x1;

万幸没有除法(码农最怕除法)。这就是为什么不用斜率来表达方程的原因。

问题2:Line1与Line2的交点?

因为标题也写出来了在OpenCV环境下,OpenCV中有非常好用的矩阵Mat数据类型。

Line1:a1*x+b1*y+c1=0

Line2:a2*x+b2*y+c2=0

所以[x,y]坐标为:

\begin{bmatrix} x\\ y \end{bmatrix}=\begin{bmatrix} a1 &b1 \\ a2&b2 \end{bmatrix}^{-1}*\begin{bmatrix} -c1\\ -c2 \end{bmatrix}       -------------(2)

具体在c++编程实践中,

	Mat ab_matrix = (Mat_<float>(2, 2) << a1,b1,a2,b2);//两条直线的系数矩阵2*2
	Mat C_matrix = (Mat_<float>(2, 1) << -c1,-c2);//两条直线的C参数矩阵2*1
	Mat xy_matrix = (Mat_<float>(2, 1));//两条直线的交点坐标矩阵2*1
	xy_matrix = ab_matrix.inv()*C_matrix;

思考的问题:蛮有意思的,后期贴到评论里。

问题1中一开始求解直线的方程我并非想要用代数法,觉得能用矩阵标的就用矩阵(opencv中mat数据类型操作还算比较快速的),什么情况下不能够用矩阵法求解直线方程?

问题2中求交点坐标[x,y],要用到矩阵求逆,这对于程序员来说与除法没什么区别,所以当行列式等于0,即无法求逆时意味着什么?

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值