mi-task/test/task-arrow/README_arrow_detection.md
2025-08-18 11:06:42 +08:00

101 lines
2.6 KiB
Markdown
Executable File
Raw Permalink 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.

# 箭头方向检测功能
本模块提供了从图像中检测绿色箭头指向方向的功能。可以集成到机器人控制系统中,用于根据视觉信息引导机器人运动。
## 功能特性
- 从图像中提取绿色箭头
- 判断箭头指向方向(左或右)
- 可视化检测过程
- 与ROS图像订阅集成
- 可作为独立工具使用
## 文件结构
- `utils/decode_arrow.py` - 核心箭头检测算法
- `task_5/detect_arrow_direction.py` - 与ImageProcessor集成的箭头检测器
- `test/test_arrow.py` - 命令行测试工具
- `test/test_arrow_with_image.py` - 带参数的图像测试工具
## 使用方法
### 1. 独立测试箭头检测
```bash
# 基本用法
python test/test_arrow.py path/to/image.png
# 高级用法
python test/test_arrow_with_image.py path/to/image.png --save result.jpg --show --debug
```
### 2. 在机器人任务中使用
箭头检测功能已集成到`task_5.py`中。机器人会根据检测到的箭头方向(左或右)来调整其移动方向。
```python
from task_5.task_5 import run_task_5
# 机器人控制代码
run_task_5(ctrl, msg, image_processor) # image_processor可选
```
### 3. 作为独立模块使用
```python
from utils.decode_arrow import detect_arrow_direction, visualize_arrow_detection
# 检测箭头方向
image = cv2.imread("path/to/image.jpg")
direction = detect_arrow_direction(image)
print(f"检测到的箭头方向: {direction}")
# 可视化检测过程
visualize_arrow_detection(image, "result.jpg")
```
或者使用集成的ArrowDetector类
```python
from task_5.detect_arrow_direction import ArrowDetector
# 初始化检测器
detector = ArrowDetector()
# 获取箭头方向
direction = detector.get_arrow_direction()
print(f"检测到的箭头方向: {direction}")
# 可视化并保存结果
detector.visualize_current_detection("result.jpg")
# 清理资源
detector.destroy()
```
## 算法原理
1. 将图像转换为HSV颜色空间
2. 使用颜色阈值提取绿色区域
3. 查找绿色区域的轮廓
4. 分析轮廓的几何特性,确定箭头方向
5. 计算轮廓的左右区域像素密度,判断指向方向
## 参数调整
如果检测效果不理想,可以调整以下参数:
1. `utils/decode_arrow.py`中的绿色HSV阈值
```python
lower_green = np.array([40, 50, 50]) # 绿色的HSV下限
upper_green = np.array([80, 255, 255]) # 绿色的HSV上限
```
2. 根据实际情况调整像素密度比较的逻辑。
## 注意事项
- 确保图像中的箭头颜色为绿色
- 图像中应该只有一个明显的箭头
- 光照条件会影响绿色提取的效果
- 如果检测结果不准确可能需要调整HSV阈值