我是靠谱客的博主 跳跃自行车,最近开发中收集的这篇文章主要介绍在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,即无法求逆时意味着什么?

 

最后

以上就是跳跃自行车为你收集整理的在OpenCV中求解两条直线的交点的全部内容,希望文章能够帮你解决在OpenCV中求解两条直线的交点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部