C++ OpenCV如何实现车道检测
发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,这篇文章主要为大家展示了"C++ OpenCV如何实现车道检测",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++ OpenCV如何实现车道检测"这篇文章
千家信息网最后更新 2024年09月21日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安全错误
数据库的锁怎样保障安全
广州能耗管理软件开发解决方案
浙江it软件开发商
方舟服务器怎么设置
社区网络安全应急预案范文
郑州网络技术学校大专
温州系统软件开发创新服务
网络安全与道德的标语
中骏 数据库
找到数据库应该往科研组里分享吗
应用软件开发培训学院
list能封装几组数据库
数据库安全性的简答题
tg网络安全有关的群
隐藏源站服务器ip
联通云服务器多卡
四川软件开发和科技成果转化
医学数据库万方免费
浙江天壹互联网科技发展有限公司
境外3安全验证服务器
江西华为鲲鹏服务器供应公司
合肥app软件开发一般要多少钱
阜阳点餐系统软件开发多少钱
中小学生网络安全竞赛登录
什么是数据库的应用系统
苏州手机app软件开发要多少钱
炼金术士视频软件开发
在线影院服务器
数据库被远程拖库
丰成网络技术有限公司
数据库里面新建数据库