C++ OpenCV如何实现车道检测
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要为大家展示了"C++ OpenCV如何实现车道检测",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++ OpenCV如何实现车道检测"这篇文章
千家信息网最后更新 2026年11月02日C++ OpenCV如何实现车道检测
这篇文章主要为大家展示了"C++ OpenCV如何实现车道检测",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++ OpenCV如何实现车道检测"这篇文章吧。
一、获取车道ROI区域
原图如图所示。
使用下面代码段获取ROI区域。该ROI区域点集根据图像特征自己设定。通过fillPoly填充ROI区域,最终通过copyTo在原图中扣出ROI。
void GetROI(Mat src, Mat &image){ Mat mask = Mat::zeros(src.size(), src.type()); int width = src.cols; int height = src.rows; //获取车道ROI区域,只对该部分进行处理 vectorpts; Point ptA((width / 8) * 2, (height / 20) * 19); Point ptB((width / 8) * 2, (height / 8) * 7); Point ptC((width / 10) * 4, (height / 5) * 3); Point ptD((width / 10) * 5, (height / 5) * 3); Point ptE((width / 8) * 7, (height / 8) * 7); Point ptF((width / 8) * 7, (height / 20) * 19); pts = { ptA ,ptB,ptC,ptD,ptE, ptF }; fillPoly(mask, pts, Scalar::all(255)); src.copyTo(image, mask);} mask图像如图所示。有了mask图像,我们就可以更好的进行后续处理,以检测车道线。
二、车道检测
1.灰度、阈值
Mat gray; cvtColor(image, gray, COLOR_BGR2GRAY); Mat thresh; threshold(gray, thresh, 180, 255, THRESH_BINARY); imshow("thresh", thresh);经过灰度、阈值后的图像如下图所示。
2.获取非零像素点
我们将图像分为两半。左半边获取左侧车道轮廓点;右半边获取右侧车道轮廓点。
vectorleft_line; vector right_line; for (int i = 0; i < thresh.cols / 2; i++) { for (int j = 0; j < thresh.rows; j++) { if (thresh.at (j, i) == 255) { left_line.push_back(Point(i, j)); } } } for (int i = thresh.cols / 2; i < thresh.cols; i++) { for (int j = 0; j < thresh.rows; j++) { if (thresh.at (j, i) == 255) { right_line.push_back(Point(i, j)); } } }
3.绘制车道线
我们将从left_line、right_line容器中各拿出首尾两个点作为车道线的起始点。
注意:这里要加一个if判断语句,否则当容器为空时(未检测到车道线),容器会溢出。
if (left_line.size() > 0 && right_line.size() > 0) { Point B_L = (left_line[0]); Point T_L = (left_line[left_line.size() - 1]); Point T_R = (right_line[0]); Point B_R = (right_line[right_line.size() - 1]); circle(src, B_L, 10, Scalar(0, 0, 255), -1); circle(src, T_L, 10, Scalar(0, 255, 0), -1); circle(src, T_R, 10, Scalar(255, 0, 0), -1); circle(src, B_R, 10, Scalar(0, 255, 255), -1); line(src, Point(B_L), Point(T_L), Scalar(0, 255, 0), 10); line(src, Point(T_R), Point(B_R), Scalar(0, 255, 0), 10); vectorpts; pts = { B_L ,T_L ,T_R ,B_R }; fillPoly(src, pts, Scalar(133, 230, 238)); } 最终效果如图所示。
以上是"C++ OpenCV如何实现车道检测"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
车道
检测
区域
图像
C++
内容
容器
篇文章
如图
半边
原图
灰度
轮廓
阈值
j++
处理
学习
帮助
两个
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
南京欣网互联网络科技
互联网科技公司华为
碳银互联网科技有限公司
亿人帮互联网科技
互联网养老 桔豆科技
深圳卡尔迅互联网科技有限公司怎么样
互联网科技股午盘股票涨跌
海南购全球互联网科技
科技赋能互联网健康
恒银科技与互联网金融
互联网软件和科技
互联网科技和信息
996高科技互联网公司
中科明德北京互联网科技
银行科技岗属于互联网吗
上海互联网科技公司ppt
福州德业互联网科技
互联网界的黑科技
绵阳真晨互联网科技有限公司
互联网科技创业计划的风险分析
互联网是第几次科技革命的成果
互联网科技博客
汽车互联网创新科技园
成都铂石互联网科技做什么的
互联网科技如何创业
互联网科技公司营业执照怎么办理
新氧科技和美国互联网有关系吗
科技互联网行业投资研究
安徽零酒互联网科技有限公司
山东亿川互联网科技有限责任公司