opencv如何求两条线的角点?线用cv::Vec4f表示,是从cv::fitLine()函数得到的,用C++回复,封装成一个函数
时间: 2024-02-12 13:09:50 浏览: 43
下面是一个封装好的C++函数,用于求解两条直线的交点:
```cpp
cv::Point2f getIntersection(const cv::Vec4f& line1, const cv::Vec4f& line2)
{
// 构造矩阵A和向量b
cv::Mat A(2, 2, CV_32F);
A.at<float>(0, 0) = line1[0];
A.at<float>(0, 1) = -line2[0];
A.at<float>(1, 0) = line1[1];
A.at<float>(1, 1) = -line2[1];
cv::Mat b(2, 1, CV_32F);
b.at<float>(0) = line2[2] - line1[2];
b.at<float>(1) = line2[3] - line1[3];
// 求解矩阵A的逆矩阵
cv::Mat t;
cv::invert(A, t, cv::DECOMP_SVD);
// 求解参数t1和t2
cv::Mat params = t * b;
// 求解交点坐标
float x = line1[0] + params.at<float>(0) * line1[2];
float y = line1[1] + params.at<float>(0) * line1[3];
return cv::Point2f(x, y);
}
```
可以使用如下方式调用此函数:
```cpp
cv::Vec4f line1 = ...; // 第一条直线
cv::Vec4f line2 = ...; // 第二条直线
cv::Point2f intersection = getIntersection(line1, line2);
```
其中,intersection就是两条直线的交点。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)