113 lines
3.3 KiB
Markdown
113 lines
3.3 KiB
Markdown
# 黄色赛道检测与距离估算
|
||
|
||
这个模块提供了一套用于检测黄色赛道并估算距离的工具。基于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)
|
||
```
|
||
|
||
## 示例结果
|
||
|
||
处理后的图像将包含以下信息:
|
||
- 红色点:表示赛道的顶部和底部中心点
|
||
- 绿色线:表示赛道的中心线
|
||
- 文本信息:距离、角度和方向
|
||
|
||
## 注意事项
|
||
|
||
- 该方法在光照条件稳定的环境中效果最佳
|
||
- 黄色赛道需要与背景有足够的对比度
|
||
- 摄像机应保持相对稳定的高度和角度
|
||
- 实际应用中需要根据具体场景调整参数 |