用opencv c++写一个车道线拟合的程序 - 老生常谈论坛 - 校园内外 - 小轻秀场

用opencv c++写一个车道线拟合的程序

#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. 显示结果。

需要注意的是,这个程序只是一个简单的示例,实际应用中还需要根据具体情况进行调整和优化。

请登录后发表评论

    没有回复内容