![2b3f0aa0b72c780839d8502f11d17e06.png](https://i-blog.csdnimg.cn/blog_migrate/8402899317f0c9fa8bac046d153ca7a7.jpeg)
通常,汽车道路上都会有白色的分道线,汽车在路上行驶时,必须在车道内行驶,这样才能保持道路秩序;想要自动驾驶,也就需要车道识别,才能让汽车沿着车道行驶。传统的车道识别通过摄像头实时采集道路信息,通过计算机视觉处理,来识别出车道。
具体的做法是,摄像头读入一帧图像,对图像进行畸变校正,变成黑白图片,高斯降噪,然后用二值化边缘检测(canny)或 sobel,分析边缘信息,得到车道信息(角度、是否偏离车道等)。
下面描述 jetbot 下,使用Python 和 OpenCV 做车道检测的具体过程:
- 相机校准
- 图像采集
- 边缘检测
- 矩形二维映射
- 车道识别与拟合
相机校准
我们知道,摄像头特别是广角摄像头,拍摄的照片通常都会有畸变(桶形畸变、枕形畸变),这样在通过摄像头采集的图片就需要校正,以修正失真。通常的校准方法是通过采集摄像头的棋盘格拍摄图像,然后通过OpenCV进行计算校准。具体算法和原理,大家可以网上搜。
准备图片
![258321a44ba308a0bf293e4abd3ad777.png](https://i-blog.csdnimg.cn/blog_migrate/17b67912c62e8bd106dfa16e6e26a123.png)
如上图所示的棋盘格图片,下载后打印到A4纸上,固定贴到墙上或者贴到硬板上,然后按下图的位置,拍摄20张图片,(不同角度、不同位置)
这里代码中提供了独立的摄像头采集图片代码:
python tegra_cam.py --width 320 --height 240 --path cap_imgs
每按一次's'键就会保存一张图片。
![b6654dad2d59efd4ddd94c7c62bc843a.png](https://i-blog.csdnimg.cn/blog_migrate/4cd28c0aa2a4326c3e8068aa54b41dc0.jpeg)
准备好图片后,就可以运行代码,进行校准了;
python calibrate_camera.py --imgpath cal_imgs --imgfile calibration.jpg
这里假设图片保存在运行代码的cal_imgs目录,图片以calibration1-20.jpg命名。运行后会保存校准参数文件到camera_cal320-240.p中,这里的320 240是之前采集的图片文件的分辨率。
车道检测
图像采集:
![c7a97662b5979824d1f1a44ce39ce3cb.png](https://i-blog.csdnimg.cn/blog_migrate/4dec81bcdf1a547a53e583d16441e729.jpeg)
校正图片:
image=cv2.imread(image_file)
height = ima