黄色赛道检测与距离估算
这个项目提供了一套用于检测黄色赛道并估算距离的工具。基于OpenCV的计算机视觉技术,能够从图像中识别黄色赛道,计算方向角度,并估算摄像机到赛道前方的距离。
功能特点
- 黄色赛道检测与分割
 - 赛道方向和角度计算
 - 赛道距离估算
 - 结果可视化展示
 - 提供易于使用的测试工具
 
安装依赖
确保已安装以下依赖库:
pip install opencv-python numpy
使用方法
基本用法
from utils.detect_track import detect_yellow_track, visualize_track_detection
# 检测赛道并估算距离
image_path = "path/to/your/image.jpg"
distance, path_info = detect_yellow_track(image_path)
if distance is not None:
    print(f"估算距离: {distance:.2f}米")
    print(f"赛道角度: {path_info['track_angle']:.2f}°")
    print(f"转向方向: {path_info['turn_direction']}")
# 可视化检测过程
visualize_track_detection(image_path, save_path="result.jpg")
使用测试脚本
项目提供了一个方便的测试脚本:
python test_track_detection.py --image path/to/your/image.jpg --observe --save result.jpg
参数说明:
--image: 要处理的图像路径(必需)--save: 结果图像保存路径(可选)--observe: 显示处理步骤的中间结果--delay: 中间步骤显示的延迟时间,单位为毫秒(默认500ms)
技术细节
检测原理
- 将图像转换为HSV颜色空间
 - 使用颜色阈值提取黄色区域
 - 寻找轮廓并合并相关区域
 - 计算赛道的上部和下部中心点
 - 基于中心点计算方向角度
 - 根据黄色区域在图像中的占比估算距离
 
距离估算
距离估算基于以下假设:
- 黄色赛道在图像中的占比与实际距离有反比关系
 - 占比越大,距离越近;占比越小,距离越远
 
注意:实际应用中,建议根据相机参数和实际测量进行标定,以获得更准确的结果。
函数说明
preprocess_image(image): 预处理图像,进行边缘检测detect_yellow_track(image, observe=False, delay=500): 检测黄色赛道并估算距离visualize_track_detection(image, save_path=None, observe=False, delay=500): 可视化检测过程estimate_distance_to_track(image): 估算到赛道的距离(简化版API)
调整参数
如果检测效果不理想,可以尝试调整以下参数:
- HSV颜色范围(针对不同光照条件):
 
lower_yellow = np.array([20, 100, 100])  # 调整黄色的下限
upper_yellow = np.array([30, 255, 255])  # 调整黄色的上限
- 轮廓近似参数:
 
epsilon = 0.01 * cv2.arcLength(all_contours, False)  # 调整系数(0.01)
- 距离估算系数:
 
normalized_distance = min(10.0, max(0.0, estimated_distance / 100.0))  # 调整系数(100.0)
示例结果
处理后的图像将包含以下信息:
- 红色点:表示赛道的顶部和底部中心点
 - 绿色线:表示赛道的中心线
 - 文本信息:距离、角度和方向
 
注意事项
- 该方法在光照条件稳定的环境中效果最佳
 - 黄色赛道需要与背景有足够的对比度
 - 摄像机应保持相对稳定的高度和角度
 - 实际应用中需要根据具体场景调整参数
 
Description
				
					Languages
				
				
								
								
									Python
								
								96%
							
						
							
								
								
									C++
								
								3%
							
						
							
								
								
									CMake
								
								0.9%