#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取图像
Mat img = imread("test.jpg");
// 转换为灰度图
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
// 边缘检测
Mat edges;
Canny(gray, edges, 50, 150);
// ROI区域
Mat roi;
Mat mask = Mat::zeros(img.size(), img.type());
Point pts[4] = {Point(0, img.rows), Point(img.cols / 2, img.rows / 2), Point(img.cols / 2 + 50, img.rows / 2), Point(img.cols, img.rows)};
fillConvexPoly(mask, pts, 4, Scalar(255, 0, 0));
bitwise_and(edges, mask, roi);
// 霍夫变换
vector<Vec4i> lines;
HoughLinesP(roi, lines, 1, CV_PI / 180, 20, 20, 10);
// 绘制直线
for (size_t i = 0; i < lines.size(); i++)
{
Vec4i l = lines[i];
line(img, Point(l[0], l[1]), Point(l[2], l[3]), Scalar(0, 0, 255), 3);
}
// 显示结果
imshow("Result", img);
waitKey(0);
return 0;
}
这个程序的主要步骤如下:
1. 读取图像。
2. 将图像转换为灰度图。
3. 对灰度图进行边缘检测。
4. 定义ROI区域,只保留车道线可能存在的区域。
5. 对ROI区域进行霍夫变换,得到直线参数。
6. 绘制直线。
7. 显示结果。
需要注意的是,这个程序只是一个简单的示例,实际应用中还需要根据具体情况进行调整和优化。
没有回复内容