1说明: 1。1完整版:汽车车道动态视频检测讲解和注释版代码,小白秒懂。 1。2pythonOpenCVmoviepynumpy为主的技术要点。 1。3代码来源:https:github。comlinghugoogleCarNDAdvancedLaneLines虽然感觉也是fork别人的,别忘了给他点个赞star 1。4感谢原作者,并对文件进行修改和代码进行删减,注释等操作,便于操作和理解。 1。5应用:无人驾驶汽车技术,热门! 2效果展示:由于gif10MB,所以是节选。 2。1原视频节选: 2。2处理后视频节选: 3准备: 3。1环境:python3。8OpenCV4。2。0deepinlinux操作系统。 3。2文件结构: github下载下来 projectvideo。mp4:原始视频,未进行标注 vedioout:文件夹为输出被标注的视频(处理后的视频文件夹) cameracal:相机参数标定文件夹。 4代码讲解: 4。1line。py代码:coding:utf8导入模块importnumpyasnp定义line这个类classLine():初始化参数definit(self):wasthelinedetectedinthelastiteration?self。detectedFalsexvaluesofthelastnfitsofthelineself。recentfitted〔np。array(〔False〕)〕averagexvaluesofthefittedlineoverthelastniterationsself。bestxNonepolynomialcoefficientsaveragedoverthelastniterationsself。bestfitNonepolynomialcoefficientsforthemostrecentfitself。currentfit〔np。array(〔False〕)〕radiusofcurvatureofthelineinsomeunitsself。radiusofcurvatureNonedistanceinmetersofvehiclecenterfromthelineself。linebaseposNonedifferenceinfitcoefficientsbetweenlastandnewfitsself。diffsnp。array(〔0,0,0〕,dtypefloat)xvaluesfordetectedlinepixelsself。allxNoneyvaluesfordetectedlinepixelsself。allyNone检测侦测defcheckdetected(self):if(self。diffs〔0〕0。01andself。diffs〔1〕10。0andself。diffs〔2〕1000。)andlen(self。recentfitted)0:returnTrueelse:returnFalse更新defupdate(self,fit):iffitisnotNone:ifself。bestfitisnotNone:self。diffsabs(fitself。bestfit)ifself。checkdetected():self。detectedTrueiflen(self。recentfitted)10:self。recentfittedself。recentfitted〔1:〕self。recentfitted。append(fit)else:self。recentfitted。append(fit)self。bestfitnp。average(self。recentfitted,axis0)self。currentfitfitelse:self。detectedFalseelse:self。bestfitfitself。currentfitfitself。detectedTrueself。recentfitted。append(fit) 4。2utils。py代码省略。 4。3mainpipeline。py(就是代码为:pipeline。py)coding:utf8第1步:导入模块importosimportcv2importmatplotlib。pyplotaspltimportnumpyasnpfrommoviepy。editorimportVideoFileClipimportline自定义模块importutils自定义模块第2步:图片阈值处理defthresholding(img):settingallsortsofthresholdsxthreshutils。abssobelthresh(img,orientx,threshmin10,threshmax230)magthreshutils。magthresh(img,sobelkernel3,magthresh(30,150))dirthreshutils。dirthreshold(img,sobelkernel3,thresh(0。7,1。3))hlsthreshutils。hlsselect(img,thresh(180,255))labthreshutils。labselect(img,thresh(155,200))luvthreshutils。luvselect(img,thresh(225,255))Thresholdingcombinationthreshholdednp。zeroslike(xthresh)threshholded〔((xthresh1)(magthresh1))((dirthresh1)(hlsthresh1))(labthresh1)(luvthresh1)〕1returnthreshholded第3步:视频拟合和图片纠正defprocessing(img,objectpoints,imgpoints,M,Minv,leftline,rightline):cameracalibration,imagedistortioncorrectionundistutils。calundistort(img,objectpoints,imgpoints)getthethresholdedbinaryimagethresholdedthresholding(undist)performperspectivetransformthresholdedwrapedcv2。warpPerspective(thresholded,M,img。shape〔1::1〕,flagscv2。INTERLINEAR)performdetectionifleftline。detectedandrightline。detected:leftfit,rightfit,leftlaneinds,rightlaneindsutils。findlinebyprevious(thresholdedwraped,leftline。currentfit,rightline。currentfit)else:leftfit,rightfit,leftlaneinds,rightlaneindsutils。findline(thresholdedwraped)leftline。update(leftfit)rightline。update(rightfit)drawthedetectedlanelineandtheinformationareaimgutils。drawarea(undist,thresholdedwraped,Minv,leftfit,rightfit)curvature,posfromcenterutils。calculatecurvandpos(thresholdedwraped,leftfit,rightfit)resultutils。drawvalues(areaimg,curvature,posfromcenter)returnresult第4步:步骤:划线校正读取原视频和生成修改后的视频划线leftlineline。Line()左线rightlineline。Line()右线获取棋盘格图片使用提供的一组棋盘格图片计算相机校正矩阵(cameracalibrationmatrix)和失真系数(distortioncoefficients)。calimgsutils。getimagesbydir(homexgjDesktopvcarlinegoodcameracal)计算objectpoints,imgpointsobjectpoints,imgpointsutils。calibrate(calimgs,grid(9,6))M,Minvutils。getMMinv()需要修改的视频:原视频projectvideoclipVideoFileClip(homexgjDesktopvcarlinegoodprojectvideo。mp4)输出修改后的视频:完成视频projectoutpathhomexgjDesktopvcarlinegoodvediooutprojectvideoout。mp4制作视频projectvideooutclipprojectvideoclip。flimage(lambdaclip:processing(clip,objectpoints,imgpoints,M,Minv,leftline,rightline))projectvideooutclip。writevideofile(projectoutpath,audioFalse) 5完结: 5。1以上代码完整,但制作视频估计花20分钟,我也是将代码最简化跑起来。 5。2如果逐步深入分析,可能要从基本开始。 5。3可以参考这篇文章:https:zhuanlan。zhihu。comp46146266