C++ opencv 如何利用 HoughLines和line函数在原图像上画出直线
时间: 2024-06-09 22:05:07 浏览: 14
使用 HoughLines 函数可以检测出图像中的直线,然后利用 line 函数在原图像上画出这些直线。
以下是示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
// 读入图像
Mat src = imread("test.jpg", IMREAD_GRAYSCALE);
if (src.empty())
{
cout << "Failed to read image!" << endl;
return -1;
}
// 边缘检测
Mat edges;
Canny(src, edges, 50, 150, 3);
// 霍夫变换检测直线
vector<Vec2f> lines;
HoughLines(edges, lines, 1, CV_PI / 180, 200, 0, 0);
// 绘制直线
Mat dst;
cvtColor(edges, dst, COLOR_GRAY2BGR);
for (size_t i = 0; i < lines.size(); i++)
{
float rho = lines[i][0], theta = lines[i][1];
Point pt1, pt2;
double a = cos(theta), b = sin(theta);
double x0 = a * rho, y0 = b * rho;
pt1.x = cvRound(x0 + 1000 * (-b));
pt1.y = cvRound(y0 + 1000 * (a));
pt2.x = cvRound(x0 - 1000 * (-b));
pt2.y = cvRound(y0 - 1000 * (a));
line(dst, pt1, pt2, Scalar(0, 0, 255), 3, LINE_AA);
}
// 显示结果
imshow("src", src);
imshow("dst", dst);
waitKey(0);
return 0;
}
```
其中,`HoughLines` 函数的参数说明如下:
- `edges`:输入的边缘检测结果图像。
- `lines`:检测到的直线向量。
- `1`:表示距离分辨率,即 Hough 空间中每个格子的大小为 1 像素。一般为 1。
- `CV_PI / 180`:表示角度分辨率,即 Hough 空间中每个角度的大小为 1 度。一般为 `CV_PI / 180`。
- `200`:表示阈值,即在 Hough 空间中投票数大于等于该值的直线才会被输出。
- `0`:表示不使用累加器的置信度阈值。一般为 0。
- `0`:表示最小直线长度,一般为 0。
`line` 函数的参数说明如下:
- `dst`:要画线的图像。
- `pt1`:直线的起点。
- `pt2`:直线的终点。
- `Scalar(0, 0, 255)`:直线的颜色,这里为红色。
- `3`:直线的宽度。
- `LINE_AA`:直线的类型,这里为抗锯齿。
相关推荐
![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)