mi-task/test/task-path-track/README_yellow_track.md
2025-05-14 12:42:01 +08:00

113 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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