道路车道检测系统:自动驾驶汽车是现代世界的新趋势之一。他们使用非常复杂的控制系统和工程技术来操纵车辆。道路车道检测是车辆导航中的重要内容之一。在这里,我描述了一个使用Raspberrypi3和计算机视觉技术的简单快速的车道检测。为了快速计算,我只是避免使用线性回归方法。这种方法在低噪声环境下效果很好,但对于复杂的场景,需要先进的统计和图像处理技术。硬件设置:将相机与您的Pi连接摄像头配置:按照此链接进行相机设置https://www.raspberrypi.org/documentation/configuration/camera.md软件设置:为python安装OpenCV。按照这些说明安装OpenCV。这些说明是从https://raspberrypi.stackexchange.com复制的。通用:sudoapt-getupdatesudoapt-getupgradesudorpi-updatesudorebootsudoapt-getinstallbuild-essentialgitcmakepkg-configsudoapt-getinstalllibjpeg-devlibtiff5-devlibjasper-devlibpng12-devsudoapt-getinstalllibavcodec-devlibavformat-devlibswscale-devlibv4l-devsudoapt-getinstalllibxvidcore-devlibx264-devsudoapt-getinstalllibgtk2.0-devsudoapt-getinstalllibatlas-base-devgfortrancd~gitclonecdopencvgitcheckout3.1.0cd~gitclonecdopencv_contribgitcheckout3.1.0如果您想将OpenCV与python2.7一起使用:sudoapt-getinstallpython2.7-devwgetsudopythonpipinstallnumpycd~/opencvmkdirbuildcdbuildcmake-DCMAKE_BUILD_TYPE=RELEASE\-DINSTALL_C_EXAMPLES=OFF\-DINSTALL_PYTHON_EXAMPLES=ON\-DOPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules\-DBUILD_EXAMPLES=ON..make-j4sudomakeinstallsudoldconfig如果您想在Python3中使用OpenCV:sudoapt-getinstallpython3-devwgetsudopython3pipinstallnumpycd~/opencvmkdirbuildcdbuildcmake-DCMAKE_BUILD_TYPE=RELEASE\-DCMAKE_INSTALL_PREFIX=/usr/local\-DINSTALL_C_EXAMPLES=OFF\-DINSTALL_PYTHON_EXAMPLES=ON\-DOPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules\-DBUILD_EXAMPLES=ON..make-j4sudomakeinstallsudoldconfig将以上配置完成大约需要2个小时。在此期间,我们可以了解一下Hough-Transform,这项技术是大多数实用车道检测算法背后的关键。Python代码:frompicamera.arrayimportPiRGBArrayimportRPi.GPIOasGPIOfrompicameraimportPiCameraimporttimeimportcv2importnumpyasnpimportmathGPIO.setmode(GPIO.BOARD)GPIO.setup(7,GPIO.OUT)GPIO.setup(8,GPIO.OUT)theta=0minLineLength=5maxLineGap=10camera=PiCamera()camera.resolution=(640,480)camera.framerate=30rawCapture=PiRGBArray(camera,size=(640,480))time.sleep(0.1)forframeincamera.capture_continuous(rawCapture,format="bgr",use_video_port=True):image=frame.arraygray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)blurred=cv2.GaussianBlur(gray,(5,5),0)edged=cv2.Canny(blurred,85,85)lines=cv2.HoughLinesP(edged,1,np.pi/180,10,minLineLength,maxLineGap)if(lines!=None):forxinrange(0,len(lines)):forx1,y1,x2,y2inlines[x]:cv2.line(image,(x1,y1),(x2,y2),(0,255,0),2)theta=theta+math.atan2((y2-y1),(x2-x1))#print(theta)GPIOpinswereconnectedtoarduinoforservosteeringcontrolthreshold=6if(theta>threshold):GPIO.output(7,True)GPIO.output(8,False)print("left")if(thetaGPIO.output(8,True)GPIO.output(7,False)print("right")if(abs(theta)GPIO.output(8,False)GPIO.output(7,False)print"straight"theta=0cv2.imshow("Frame",image)key=cv2.waitKey(1)&0xFFrawCapture.truncate(0)ifkey==ord("q"):break示例输出结果:GPIO引脚连接到Arduinomega用于伺服电机控制。#includeServomyservo;voidsetup(){myservo.attach(10);//attachservomotorPWM(orange)wiretopin10pinMode(0,INPUT);//attachGPIO7&8pinstoarduinopin0&1pinMode(1,INPUT);voidloop(){if(digitalRead(0)==HIGH&&digitalRead(1)==LOW){myservo.write(118);}if(digitalRead(1)==HIGH&&digitalRead(0)==LOW){myservo.write(62);}if(digitalRead(1)==LOW&&digitalRead(0)==LOW){myservo.write(90);}}如果您对此项目有任何想法、意见或问题,请在下方留言。以上内容翻译自网络,原作者:abhinav,如涉及侵权,可联系删除。